Форум: "Прочее";
Текущий архив: 2015.09.10;
Скачать: [xml.tar.bz2];
Внизвыделение наиболее частых последовательностей Найти похожие ветки
← →
[ВладОшин] © (2014-03-25 10:24) [0]есть таблица
Name varchar
Flag char(1)
записей порядка миллиона.
было потрачено много человеко-часов, что бы по имени проставился флаг
т.е. оператор читает наименование и ставит признак. Буквально, да-нет
буквально
"иванов иван иванович" - оператор ставит "Ч" , т.е. человек
"скупка краденного, звони!" - оператор ставит "О" , т.е. объявление
Можно как-то теперь, имея порядка сотни тысяч проставленных признаков, по типичным последовательностям символов в name предположить флаг?
достаточно 90 %% точности.
← →
clickmaker © (2014-03-25 10:27) [1]> по типичным последовательностям символов
словарь имен-фамилий?
← →
clickmaker © (2014-03-25 10:32) [2]либо анализировать окончания слов на предмет человечности. -ов -ова -нко -вич -вна и т.д.
← →
Konstantin (2014-03-25 10:45) [3]на абдурахмане-ибн-хассабе не сработает.
← →
clickmaker © (2014-03-25 10:48) [4]на Барнаби Мармадюк Алоизий Бенджи Кобвеб Дартаньяне тоже. Ну, попадут они в оставшиеся 10%
← →
[ВладОшин] © (2014-03-25 10:50) [5]
> словарь имен-фамилий?
как подмножество, да.
конкретнее, интересует сейчас юр.лицо это или частник
> либо анализировать окончания слов на предмет человечности.
> -ов -ова -нко -вич -вна и т.д.
Это есть :)
набрал 66 000 имен, написал ф-цию
getgenderbyfio("ошин влад виторович") = 1, т.е на 100% мужик
getgenderbyfio("иванова зульфия романовна") = -1, т.е на 100% сударыня.
ну и
getgenderbyfio("шевченко игорь батькович") = 0.66
getgenderbyfio("хаав валентина батьковна") = -0.66
и т.п.
← →
[ВладОшин] © (2014-03-25 10:53) [6]абдурахмане-ибн-хассабе - 33% мужик :)
← →
clickmaker © (2014-03-25 10:55) [7]> [6] [ВладОшин] © (25.03.14 10:53)
а почему? -ан - типично мужское окончание имени
← →
Jeer © (2014-03-25 11:03) [8]Taglite:
http://www.dialog-21.ru/archive/2005/kreidlin%20lg/kreydlinl.htm
← →
[ВладОшин] © (2014-03-25 11:03) [9]ну так остальные компоненты не дали вердикта - поэтому принижается ценность того кто дал. Если фамилия за мужика а имя нео пределилось - то пополам.
фамилия спорная - как делитель добавит, как знаменатель - 0. Тут более менее нормально. интересует сабж
← →
Jeer © (2014-03-25 11:06) [10]>[ВладОшин] © (25.03.14 10:53) [6]
>абдурахмане-ибн-хассабе - 33% мужик :)
Вырастет - само решит.
← →
Дмитрий СС (2014-03-25 12:19) [11]Нейронные сети занимаются обобщением. Попробуйте организовать.
← →
Konstantin (2014-03-25 12:47) [12]нейронные сети - зло.
см. терминатор
← →
И. Павел © (2014-03-25 12:52) [13]> Нейронные сети занимаются обобщением. Попробуйте организовать.
Если на такой задаче, обучаясь всего на миллионе примеров, нейронная сеть даст 90% правильных ответов, то это, скорее всего, будет дедушка терминатора и такое лучше не писать :) Вот цифру по 25 пикселям определить или прогноз изменения функции предсказать — это да.
← →
Anatoly Podgoretsky © (2014-03-25 13:09) [14]
> clickmaker © (25.03.14 10:55) [7]
Регистрировать со снятым штанами
← →
Дмитрий СС (2014-03-25 17:53) [15]
> И. Павел © (25.03.14 12:52) [13]
Все так грустно что-ли в нейронных сетях?
← →
й (2014-03-26 07:43) [16]составляем словарь всех слов (лучше корней, а не форм, но не суть)
для каждого подсчитываем отношение нахождений в списках "О" и "Ч"
принимаем, что при нахождении в новом имени словарного слова это отношение будет показывать вероятность для этого имени оказаться в первом списке
остаётся типа "сложить" (объединить) эти вероятности для всех найденных в словаре слов из нового имени
а вот по какой формуле их нужно объединять - пусть подскажут знатоки теорвера (думаю, тут возможны варианты)
← →
й (2014-03-26 08:23) [17]... возможно, сработает и простое среднеарифметическое
← →
И. Павел © (2014-03-26 09:25) [18]> [15] Дмитрий СС (25.03.14 17:53)
Все так грустно что-ли в нейронных сетях?
Не все. Но в данной задаче у цепи будет много входных параметров. А чем больше входов, тем сложнее подобрать оптимальную структуру цепи и тем медленнее ее обучить.
В моей задаче был всего 1 вход типа int (прогноз функции), и то еле подобрал более или менее приемлемую структуру. Ради интереса можете попробовать сделать цепь, которая прогнозирует поведение функции sin(x) на 10000 примерах — далеко не любая структура цепи подойдет и выдаст хоть что-то, похожее на синусоиду.
← →
Константин 1 (2014-03-26 09:29) [19]
> и простое среднеарифметическое
в делфи есть уже подобное. для английских. по звучанию сравнение.
← →
clickmaker © (2014-03-26 12:51) [20]> [19] Константин 1 (26.03.14 09:29)
в дельфи есть soundex?
← →
clickmaker © (2014-03-26 13:02) [21]да, есть, однако. в 2010.
Можно русские имена/фамилии транслитерировать и натравить на них буржуйский soundex
← →
Jeer © (2014-03-26 13:03) [22]soundex или его аналог здесь не подойдет.
← →
И. Павел © (2014-03-26 13:58) [23]> > либо анализировать окончания слов на предмет человечности.
> > —ов —ова —нко —вич —вна и т.д.
>
> Это есть :)
И какая точность получилась?
В сети полно примеров алгоритмов определения пола. ИМХО, на обычных именах 90% точности получится:
Вот, например: http://wiki.kint.ru/index.php/Определение_рода_по_ФИО_(1С)
А вот теория: http://ivan.begtin.name/2010/05/04/систематизация-распознавания-пола-и/
> В моей задаче был всего 1 вход типа int
:
Ну, точнее, 1 величина + еще несколько предыдущих значений этой величины.
← →
ВладОшин © (2014-03-27 10:40) [24]
> И какая точность получилась?
мне нужно было 300 000 разделенных, брал только с вероятностью > 0.5
Просмотрелось около 400 000 человек, когда 300 000 набралось
т.е. 75% гарантировано, можно сказать.
Если брать 33% - а таких много, то к 90% выйти можно, думаю.
Но не это главное..
← →
ВладОшин © (2014-03-27 10:45) [25]как такой алгоритм:
Заводим таблицу Ценности слов
Берем строку таблицы. Разбиваем на слова. По тем строкам, которые уже оператором распознаны и поставлен признак, по каждому совпадению в таблицу ценности пишем слово и кол-во совпадений, как по признаку Организация, так и по признаку Человек.
Берем след строку таблицы
--
на не распознанных строках разбиваем по словам и все слова ищем в таблице соответствий. Каких признаков больше - то и есть
← →
ВладОшин © (2014-03-27 10:58) [26]поясню
Пусть есть "Загс московская область"
имеем: Загс, московская, область
до этого около 20 разных загсов операторы определили как юр.лицо
и пусть 3-4 имеют фамилию типа Загсов, Загсович и т.п.
имеем 20 / 4 в пользу юриков.
т.е. в таблицу соответствий запишем
NAME = Загс
Legal = 20
Private = 4
и т.п.
Потом, следующего, уже тестируемого, разобьем на слова и поищем эти слова в таблице соответствий. sum() where like "%одно_слово_из_имени_тестируемого%"
т.о. каждое слово даст некий коэффициент за/против юрика/физика
суммируем, смотрим
← →
ВладОшин © (2014-03-27 11:00) [27]как бы к вероятности привязаться таким алгоритмом.. что бы от -1 до 1 ответ давало, где abs() вероятность, а знак - юрик/физик
что на что бы поделить такое :)
← →
clickmaker © (2014-03-27 11:05) [28]Sign(JurProb - PhysProb)*JurProb/PhysProb
← →
ВладОшин © (2014-03-27 11:16) [29]не понял..
вот например "ЗАГС ПРИОКСКОГО РАЙОНА ГЛАВНОЕ УПРАВЛ."
посчитанные совпадения (NAME, Legal , Private )
ЗАГС 8 3
ПРИОКСКОГО 8 0
РАЙОНА 555 0
ГЛАВНОЕ 26 0
УПРАВЛ. 17 0
тут более 90% должно быть юр.лицо
← →
ВладОшин © (2014-03-27 11:26) [30]блин, конечно!
(@PRIVAT_SUM - @LEGAL_SUM) / (@PRIVAT_SUM + @LEGAL_SUM)
← →
ВладОшин © (2014-03-27 12:12) [31]вроде, работает! :)
только вот что странно
word legal privat
ООО 24294 11
уж ООО - всегда было юриком, сколько процедур под это дело писалось..
ан нет :) 11 человек нашлось таки
← →
ВладОшин © (2014-03-27 16:14) [32]статистика пока собирается, но уже неплохо
из 85 748 - 5 ошибок когда физика юриком назвала
а наоборот хуже
из 31 766 - 1 310 ошибок когда юрика физиком назвала
ну там сложно - это в основном "ИП ИВАНОВ ИВАН БАТЬКОВИЧ"
хотя.. если только потом искусственно ценность слов типа "ИП" поднять в ту или другую сторону.. проапдейтить LEGAL в 999999, и с любым сочетанием остальных слов будет юр лицо..
← →
Inovet © (2014-03-27 16:20) [33]> [32] ВладОшин © (27.03.14 16:14)
> "ИП ИВАНОВ ИВАН БАТЬКОВИЧ"
предприниматель
ИП ИВАНОВ ИВАН
сетевой IP
ИП ИВАНОВА ИВАНА
прдпринимательница
ИП ИВАНОВА ИВАНА
← →
clickmaker © (2014-03-27 16:26) [34]> прдпринимательница
ИП Головач Лена
← →
ТНЕ картман (2014-03-27 16:27) [35]
> ВладОшин © (27.03.14 12:12) [31]
> ну там сложно - это в основном "ИП ИВАНОВ ИВАН БАТЬКОВИЧ"
"ИП тра-ля-ля " - может быть физиком? Сделай словарь исключений: ООО, ОАО...
← →
ВладОшин © (2014-03-27 16:56) [36]думаю, как Гарднер описывал самообучающую машину по игре в крестики нолики из спичечных коробков, провести обучение.
Пусть "ИП Головач Лена" склонилась к физику
ИП - 100
Головач - 50
Лена - 51
тогда "наказываем" Головач и Лена - умножаем вес этих слов на 0.99
а те слова, кто правильно предсказывал, умножаются на 1.01, допустим
повторяем эксперимент, продолжая наказывать и поощрять слова, до тех пор, пока не выйдем на заданную величину или результат не начнет ухудшаться.
Но для этого надо статистику собрать побольше, всю возможную, желательно.
← →
Кщд (2014-03-27 21:36) [37]Влад, а вот нефигово б было оформить Ваши изыскания в общедоступный код
← →
Styx (2014-03-27 23:48) [38]ИМХО, ИП с чисто философской точки зрения - не понятно, то ли одно, то ли другое. Зависит от задачи, конечно, но вне контекста я бы считал физлицом. Если надо обратное - только жёсткое правило, попытка обучить приведёт к перекосу жизненных ценностей у робота :-)
← →
Jeer © (2014-03-28 00:27) [39]Робот имеет право поменять безболезненно даже политическую платформу.
← →
turbouser © (2014-03-28 00:30) [40]Ип Ман - китаец такой был, мастер боевых искусств :)
http://ru.wikipedia.org/wiki/%D0%98%D0%BF_%D0%9C%D0%B0%D0%BD
← →
clickmaker © (2014-03-28 08:47) [41]> Ип Ман - китаец
значит, надо анализировать еще и регистр символов
← →
[ВладОшин] © (2014-03-28 20:56) [42]
> Кщд (27.03.14 21:36) [37]
обязательно, но потом
надо пока идею проверить 6)
← →
[ВладОшин] © (2014-03-28 21:04) [43]
> обязательно, но потом
т.е. пока "так быстро бегаем, что не успеваем тачки грузить" (с) :)
← →
[ВладОшин] © (2014-03-31 21:41) [44]есть таблица, с уже распознанными именами
CREATE TABLE [dbo].[CorpPrivate](
[name] [varchar](999) NULL,
[iscorp] [varchar](999) NULL
) ON [PRIMARY]
--------
создадим таблицу-справочник
CREATE TABLE [dbo].[Spr_CorpPrivate](
[id] [bigint] IDENTITY(1,1) NOT NULL,
[Word] [varchar](50) NOT NULL,
[Corp] [int] NOT NULL,
[Priv] [int] NOT NULL
) ON [PRIMARY]
и триггер, для облегчения заполнения справочникаALTER TRIGGER [dbo].[insert_spr_corp_priv]
ON [dbo].[Spr_CorpPrivate]
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[Spr_CorpPrivate]
(Word, [Corp], [Priv])
SELECT distinct I.[Word], 0, 0
FROM inserted I
left join [dbo].[Spr_CorpPrivate] T on T.Word = I.Word
where T.Word is null;
update T
set t.corp = t.corp + Z.corp,
t.priv = t.priv + Z.priv
from [dbo].[Spr_CorpPrivate] T
join (select i.word word, sum(i.corp) corp, sum(i.priv) priv
from inserted i
group by word )
Z on Z.word = T.Word;
END
-------------
процедура вставки в справочник. Тупо по словам вставляем в справочник
ALTER PROCEDURE [dbo].[add_to_spr_corp_priv]
@in_str varchar(1024),
@in_CP char(1)
AS
BEGIN
SET NOCOUNT ON;
declare @str varchar(1024);
declare @CP char(1);
--set @str = "ООО "МОЙ ДОМ"";
--set @CP = "Y";
set @str = @in_str;
set @CP = @in_CP;
set @str = replace(@str, ",", " , ");
set @str = replace(@str, ".", " . ");
set @str = replace(@str, "-", " - ");
set @str = replace(@str, """, " " ");
set @str = replace(@str, " ", " ");
select @str = "select """ + replace(@str, " ", """ as word, 0 corp, 0 priv union all select """) + """,0,0 ";
-- print @str
declare @t table(id int identity, word varchar(100), corp int, priv int);
insert into @t
exec (@str);
if @CP = "Y"
update @t set corp = 1
else
update @t set priv = 1;
insert into [dbo].[Spr_CorpPrivate] ([Word], [Corp], [Priv])
select word, corp, priv
from @t where word <> "";
END
--------------------
копим словаdeclare @FIO varchar(4000), @c char(1);
declare CCC Cursor fast_forward for
select Q.Name, Q.iscorp
from [CorpPrivate] Q;
OPEN CCC;
FETCH NEXT FROM CCC INTO @FIO, @c;
WHILE @@FETCH_STATUS = 0
BEGIN
exec add_to_spr_corp_priv @FIO, @c;
FETCH NEXT FROM CCC INTO @FIO, @c;
END;
CLOSE CCC; DEALLOCATE CCC;
-------------------------
имеем в справочнике:
Word Corp Priv
АРБИТРАЖНЫЙ 570 0
ВТОРОЙ 161 0
СУД 1005 0
ГАВРИЛИНА 3 45
ОЛЬГА 291 14024
и т.п.
дальше пока не написал :)
смысл - тестируемую разбиваем по словам и все слова ищем в таблице-справочнике соответствий, суммируя признаки.
Каких признаков больше - то и есть.
← →
[ВладОшин] © (2014-03-31 21:45) [45]
> дальше пока не написал :)
написал :)
но нет, надо не так. Переписываю..
← →
картман © (2014-03-31 22:03) [46]
> Каких признаков больше - то и есть.
да ладно, т.е. "ОАО Алексей Иванов" - частник?
← →
[ВладОшин] © (2014-03-31 22:40) [47]ну где же
SELECT sum([Corp]) - sum([Priv])
FROM [dbo].[Spr_CorpPrivate]
where word in (
"ОАО",
"Алексей",
"Иванов"
)
72 260!
← →
[ВладОшин] © (2014-03-31 22:43) [48]точнее так надо:
SELECT cast((sum([Corp]) - sum([Priv])) as float) / (sum([Corp]) + sum([Priv]))
FROM [Coordinates].[dbo].[Spr_CorpPrivate]
where word in (
"ОАО",
"Алексей",
"Иванов"
)
← →
Styx (2014-03-31 23:25) [49]
> Ип Ман - китаец такой был, мастер боевых искусств :)
>
С китайцами и прочими азиатами вообще беда, мне в журнал статьи приходят, нужно из полного имени сделать фамилию и инициалы... и... и... и всё :(
← →
clickmaker © (2014-03-31 23:46) [50]Удалено модератором
← →
[ВладОшин] © (2014-03-31 23:50) [51]ь знак не может быть не в конце :)
← →
картман © (2014-04-01 00:06) [52]Удалено модератором
← →
й (2014-04-01 10:42) [53][ВладОшин] > ...суммируя признаки. Каких признаков больше - то и есть.
не уверен. я бы предложил попробовать считать среднеарифметическое от Corp/(Corp+Priv)
то есть если у вас в названии будет 2 слова с противоположным соотношением попаданий, но разными частотами употребления, типа
Слово1 10000 100
Слово2 10 1000
то получите (10000+10)/(100+1000) (у вас формула другая и зачем там вычитание я вообще не понял, но суть вроде та же) т.е. гораздо чаще встречающееся слово полностью "задавит" второе
в моём же варианте будет (10000/10100+10/1010)/2 = 0,5 (половинная вероятность попадания в Corp), т.е. противоположные соотношения полностью уравновесили друг друга, несмотря на разные частоты употребления слов
возможно, чаще употребляемые слова и должны вносить большую долю в итог, но навряд ли прямо пропорционально частоте (как у вас) - может быть, пропорционально логарифму от частоты или корню, как-то так
← →
ВладОшин © (2014-04-01 11:08) [54]
> й (01.04.14 10:42) [53]
> зачем там вычитание я вообще не понял
все просто: если будет минус, то это ФизЛицо. Плюс - ЮрЛицо.
А величина - вероятность. Да, это не совсем вероятность, в строгом понимании.
Скажем так, это некая количественная оценка, близкая к вероятности.
>> т.е. гораздо чаще встречающееся слово полностью "задавит" второе
да. Это и преследуется.
← →
ВладОшин © (2014-04-01 11:26) [55]print [dbo].[IsCorpProbality]("СОЛИКАМСКИЙ ИГОРЬ СЕРГЕЕВИЧ")
-0.919797
но:
print [dbo].[IsCorpProbality]("ИП СОЛИКАМСКИЙ ИГОРЬ СЕРГЕЕВИЧ")
-0.0447461
т.о. я бы не очень доверял abs(оценке) < 0.3 или 0.4
итого
Руководство говорит: Дайте 1000 ФЛ. Или сажаем оператора часа на 2
или
Пишем: select top 1000 .. where .. and IsCorpProbality () < -0.4
или апдейтим таблу по abs(оценке) > 0.3 в зависимости от знака
остальное операторы глазами доотметят. Если надо всех разобрать.
Но обычно не надо :)
Есть список, тысяч на 50
Достаточно по 10-20 тысяч выбрать, что бы предел нашего "производства" перекрыть
← →
й (2014-04-01 12:43) [56]ок, главное - эмпирически проверить оптимальность
и тогда уж select top 1000 .. order by IsCorpProbality DESC
← →
ВладОшин © (2014-04-02 10:17) [57]это все хорошо, но все равно это все не то...
>> выделение наиболее частых последовательностей
1. СоликамскЗерно, СтравропольЗерно, КазахстанЗерно,
т.е. ххххЗерно
2. ПензаЗерно
как бы сделать так, что бы имея 1 как ЮЛ, определить что 2 тоже ЮЛ?
разумеется, в общем случае
← →
turbouser © (2014-04-02 10:21) [58]
> [ВладОшин] © (31.03.14 23:50) [51]
>
> ь знак не может быть не в конце :)
А как же Лесь, Василь и т.п.?
← →
turbouser © (2014-04-02 10:27) [59]
> turbouser © (02.04.14 10:21) [58]
>
>
> > [ВладОшин] © (31.03.14 23:50) [51]
> >
> > ь знак не может быть не в конце :)
Сорри :)
Чукча писатель..
← →
ВладОшин © (2014-04-02 10:29) [60]м-да..
товарищи :
Дума А.В.
Мед А.П.
Работа А.М.
Сосна С.П.
с близкой к 100% вероятности - ЮЛ :)
"X.Y." - тоже как-то надо учитывать..
← →
ВладОшин © (2014-04-02 10:30) [61]
> turbouser © (02.04.14 10:27) [59]
ни че. не каждый не поймет :)
← →
ВладОшин © (2014-04-02 10:31) [62]
> turbouser © (02.04.14 10:27) [59]
к тому же, я не прав: Лоськин
← →
Mystic © (2014-10-31 21:05) [63]Байесовские сети, Бернулли, наверное, чуть лучше. Копать можно в сторону учета сочетаний, ...
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2015.09.10;
Скачать: [xml.tar.bz2];
Память: 0.63 MB
Время: 0.049 c