Датасеты для тренировки моделей

Oct 18, 2016 18:27


Для обучения автоэнкодеров достаточно собрать по большому корпусу текстов слова, отсеять редкие (опечатки), и работать с ними. Можно спорить, является ли автоэнкодер чисто unsupervised моделью, но данные для него получаются без ручного труда.

Остальные модели требуют списков слов с леммами, эталонную классификацию слов по частям речи или эталонные списки грамматических тегов для слов.


Я получаю необходимые датасеты из своего SQL Словаря русского языка (http://solarix.ru/sql-dictionary-sdk.shtml). Почти 300 тысяч словарных статей, 3.5 миллиона словоформ в этой словарной базе содержат разнообразную грамматическую информацию с ручной выверкой. Загрузив словарную базу в MS SQL (достаточно бесплатной express-версии, так как размер базы намного меньше 10 Гб), или в другую СУБД, можно обычными SQL запросами получать необходимые паттерны. Я обычно делаю запросы в SQL Server Management Studio и сохраняю результаты прямо оттуда в текстовые файлы с табуляцией в качестве разделителя.

Например, запрос

select distinct F.name, E.name, C.name

from sg_form F

join sg_entry E on E.id=F.id_entry and E.flags=0

join sg_class C on C.id=E.id_class

join sg_language L on L.id=C.id_lang and L.name='russian'

выведет более 2.4 миллионов пар слово-лемма с дополнительной привязкой к части речи:



Датасет для классификации слов по частям речи:

select distinct F.name, C.name

from sg_form F

join sg_entry E on E.id=F.id_entry and E.flags=0

join sg_class C on C.id=E.id_class

join sg_language L on L.id=C.id_lang and L.name='russian'

Он генерирует датасет с 2.4 миллионами пар:



Чтобы получить датасет, в котором для каждого слова будет задан эталонный список грамматических тегов, необходимо два компонента. Во-первых, нужна скалярная функция:

CREATE FUNCTION [dbo].[GetFormCoords]

(

@IdEntry INT,

@IdForm INT

)

RETURNS VARCHAR(1000)

AS

BEGIN

DECLARE @result VARCHAR(1000)

DECLARE C CURSOR LOCAL FAST_FORWARD FOR

select C.name, S.name

from sg_entry E, sg_entry_coord EC, sg_coord C, sg_state S

where E.id=@IdEntry

and EC.id_entry=E.id

and C.id=EC.icoord

and S.id_coord=C.id

and S.id=EC.istate

and C.name NOT IN ( 'CHARCASING', 'OMONYM_RESOLUTION' )

union

select C.name, S.name

from sg_form F, sg_entry E, sg_form_coord FC, sg_coord C, sg_state S

where F.iform=@IdForm

and E.id=@IdEntry

and FC.id_entry=E.id

and FC.iform=F.iform

and C.id=FC.icoord

and S.id_coord=C.id

and S.id=FC.istate

and C.name NOT IN ( 'CHARCASING', 'OMONYM_RESOLUTION' );

SET @result = ''

OPEN C

DECLARE @coord_name varchar(30)

DECLARE @state_name varchar(30)

FETCH C INTO @coord_name, @state_name

WHILE @@FETCH_STATUS=0 BEGIN

SET @result = @result + ' ' + @coord_name + ':' + @state_name

FETCH C INTO @coord_name, @state_name

END

CLOSE C

DEALLOCATE C

RETURN LTRIM(@result)

END

Во-вторых, сам запрос, который генерирует датасет:

select distinct F.name, C.name, dbo.GetFormCoords(E.ID,F.IFORM)

from sg_form F

join sg_entry E on E.id=F.id_entry and E.flags=0

join sg_class C on C.id=E.id_class

join sg_language L on L.id=C.id_lang and L.name='russian'

join coord_pairs P on P.id=F.id_dims

Результат его работы:



В третьем столбце присутствует цепочка токенов разной длины, которая отлично подходит для рекуррентных сетевых моделей.

SQL словарь, machine learning

Previous post Next post
Up