Большая word2vec-модель на русскоязычных художественных текстах
Общие замечания
Этот датасет содержит векторную семантическую модель, натренированную с помощью алгоритма word2vec на корпусе русскоязычных художественных текстов объемом 13 млрд слов.
Общеизвестно, что расположение векоров в векторном пространстве модели зависит от жанровых особенностей обучающего корпуса1. Исходя из этих соображений представляется полезным обучить модель только на художественных текстах, чтобы иметь под рукой инструмент как академического исследования векторной семантики в художественной литературе, так и основу для инженерных решений в области автоматической обработки художественных текстов.
Корпус
Отбор текстов
В обучающий корпус вошли произведения как классической русской литературы, так и принадлежащие современным авторам. Отбор авторов по степени их известности, жанровым преференциям внутри художественного сегмента литературы и литературным школам не производился. Единственным критерием включения текста в корпус была возможность отнести его к сфере fiction.
Предобработка и объемы
Общий объем обучающего корпуса до предобработки составил 13 981 681 569 слов. В соответствии с практикой обучения word2vec-моделей2 он был разбит на предложения с помщью сплиттера sentenize
из модуля razdel
3. Предложения короче 5 символов при формировании корпуса игнорировались:
def splt(doc, fw):
for sentence in doc:
se = list(sentence)
string = se[2]
if len(string) < 5:
continue
fw.write(string.strip())
fw.write("\n")
В итоге корпус составил 1 357 318 182 предложения. Каждое предложение было представлено в результирующем файле на отдельной строке. При разбиении на предложения исходный корпус обрабатывался поабзацно, было обработано приблизительно 539 300 000 абзацев.
Корпус был лемматизирован с помощью программы Mystem4. Из текстов удалены все стоп слова в соответствии с этим перечнем. После удаления стоп-слов корпус сократился до 7 363 305 726 слов.
Особенность модели
В модели представлены только леммы, грамматическая информация (например, частеречная принадлежность) отсутствует по причине высоких временных и вычислительных затрат на ее включение.
Обучение модели
Код обучения и сохранения модели, содержит параметры обучения:
import sys
import logging
import gensim
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
pth = 'splitted_lemmed_lines.txt'
data = gensim.models.word2vec.LineSentence(pth) # train sentence by sentence
model = gensim.models.Word2Vec(data, vector_size=300, window=10, min_count=2, sg=0) # comparable with web_mystem_skipgram_500_2_2015.bin
model.save('cbow_300_10.model') # saving
Состав датасета
Датасет включает файл описания README.md
, файл тестов tst.py
, а также сами файлы модели:
- cbow_300_10.model (197,5 Мб)
- cbow_300_10.model.syn1neg.npy (5,8 Гб)
- cbow_300_10.model.wv.vectors.npy (5,8 Гб)
Использование модели
Инициализировать модель можно с помощью следующего кода:
import gensim
model = gensim.models.Word2Vec.load("cbow_300_10.model")
Все леммы присутствуют в модели в словарном написании в нижнем регистре.
Код получения сведений о ближайших соседях заданной лексемы (для слов "слово", "язык", "речь"). Сведения выводятся на экран:
import gensim
model = gensim.models.Word2Vec.load("cbow_300_10.model")
words = ['слово', 'язык', 'речь']
i = 0
for w in words:
i += 1
if i > 10:
break
print(w)
for w in model.wv.most_similar(positive=[w], topn=10):
print(w[0], w[1])
print('\n')
Результат обращения к модели:
слово
фраза 0.7940748929977417
словечко 0.660197913646698
слог 0.6321544647216797
реплика 0.6014743447303772
словосочетание 0.5927842259407043
изречение 0.5817650556564331
высказывание 0.5799553990364075
глагол 0.5734915733337402
эпитет 0.561481773853302
сентенция 0.5556464791297913
язык
наречие 0.6684444546699524
диалект 0.6094661355018616
латынь 0.589239239692688
язычок 0.5698436498641968
алфавит 0.5039058327674866
грамматика 0.5026536583900452
суахили 0.4977210760116577
идиома 0.49517789483070374
иврит 0.49501460790634155
произношение 0.49271130561828613
речь
монолог 0.6399776339530945
спич 0.591359555721283
тирада 0.5899513959884644
фраза 0.5652049779891968
диалог 0.5477429032325745
проповедь 0.5333778262138367
слово 0.521654486656189
разглагольствование 0.5193266272544861
филиппика 0.5184418559074402
декламация 0.5146515369415283
Релевантные публикации
Научные публикации об исследованиях языка русской художественной литературы с использованием векторно-семантических моделей
- Орехов Б. В. Индивидуальная семантика Л. Н. Толстого в свете векторных моделей // Terra Linguistica. — 2023. — Т. 14. — № 4. — С. 119–129. DOI: 10.18721/JHSS.14409
- Орехов Б. В. Стихи и проза через призму дистрибутивной семантики // Острова любви БорФеда: Сборник к 90-летию Бориса Федоровича Егорова / ИРЛИ РАН; СПбИИ РАН; Союз писателей Санкт-Петербурга; Ред.;сост. А. П. Дмитриев и П. С. Глушаков. — СПб.: Издательство «Росток», 2016. — С. 652–655.
Другие публикации word2vec-моделей на художественных текстах
- Orekhov B. The model built on Leo Tolstoy's collected works (w2v-russian-tolstoy (Revision cd1317b)) // Hugging Face, 2024. URL: https://huggingface.co/nevmenandr/w2v-russian-tolstoy. DOI: 10.57967/hf/2558
Благодарности
Публикатор признателен Евгении Лекаревич за помощь в отборе текстов для обучающего корпуса.
Примечания
- См. Kutuzov A., Kuzmenko E. Comparing Neural Lexical Models of a Classic National Corpus and a Web Corpus: The Case for Russian // Lecture Notes in Computer Science. 2015. 47‒58. doi:10.1007/978-3-319-18111-0_4
- URL: https://github.com/piskvorky/gensim/blob/develop/docs/notebooks/Any2Vec_Filebased.ipynb
- URL: https://github.com/natasha/razdel
- URL: https://yandex.ru/dev/mystem/