Примечание. Этот пост также можно прочитать здесь

В моем первом посте (https://github.com/bedapudi6788/deepsegment) рассматривается проблема сегментации предложений с плохой пунктуацией. Хотя абсолютная точность, указанная в сообщении, может показаться ниже, сама модель отлично работает в реальном мире (как объясняется в обновлении исходного сообщения).

Изучая выравнивание векторов, я понял, что для некоторых комбинаций языков выровненные векторы могут использоваться для построения многоязычных моделей. Прежде чем перейти к результатам многоязычного DeepSegment, я кратко коснусь того, что такое выравнивание векторов и его преимуществ.

Выравнивание вектора - очень простая, но эффективная концепция. Когда мы обучаем некоторую векторную модель слов (например: FastText, Word2vec, glove) на корпусе, векторные представления слов, которые мы получаем, являются представлениями семантического сходства слов в этом корпусе. Но, когда мы обучаем FastText или Glove на двух разных корпусах, полученное векторное представление не переводится.

Взгляните на изображение ниже.

Поскольку не существует универсальной базовой истины, слово-векторные модели не могут понять, что «яблоко» в первом корпусе - это то же самое, что «яблоко» в корпусе 2. Чтобы преодолеть это, нам нужен список значений базовой истинности, в котором говорится, что « word_1 »в corpus_1 равно« word_m »в corpus_m. Как только мы получим эти базовые значения истинности, мы вращаем и трансформируем векторные пространства, чтобы минимизировать расстояние между нашими парами основных истинных слов.

Обратите внимание, что во время выравнивания векторного пространства мы только вращаем и трансформируем векторные пространства. В результате меняются векторы слов, но не их расстояние. то есть: если d (яблоко - ›оранжевый) = 0,8 до того, как мы выполним выравнивание векторов, он останется таким же после выравнивания, даже если сами векторы изменятся.

Метод выравнивания векторов вместе с примерами сценариев и основными векторами можно найти здесь вместе с бумагой.

При работе с многоязычными моделями очень важно выравнивание векторов, поскольку все слои будут иметь одинаковые веса для каждого ввода. Представьте себе слой с весами w1, w2, w3,…, wn. Если наши входные данные не нормализованы, веса (w1 ..) не могут быть эффективно изучены, и модель не будет сходиться.

Теперь я обучаю DeepSegment французскому, итальянскому и английскому языкам с их выровненными векторами в качестве начальных входных данных, чтобы получить единую модель, которая может выполнять сегментацию предложений для текста на этих языках. В моем следующем посте я собираюсь показать, как создать нулевое распознавание коротких именованных сущностей и классификацию текста с нулевым кадром, и продемонстрирую, что для языков с меньшим объемом данных помогает предварительное обучение с выровненными векторами.

Подобно DeepSegment v1, я создал по миллиону примеров для каждого из этих языков с меткой B-отправлено, чтобы отметить начало предложения.

После 26 эпох модель сошлась с проверкой баллом F1 (метки, отправленной B) 95,56.

Результаты теста можно увидеть на следующем изображении.

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

Предварительно обученную модель можно скачать здесь. В качестве альтернативы просто установите последнюю версию DeepSegment (она будет выпущена к 5 февраля) и используйте встроенную функцию загрузки.

pip install --upgrade deepsegment
import deepsegment
deepsegment.download('eng_fra_ita')