И об извечном российском сексизме выскажусь. Я тут word2vec-модели обучаю, это распределённые представления слов в виде векторов, обученные на больших коллекциях текстов (в моём случае librusec + wiki + ещё кое-что). В библиотеке gensim есть стандартная функция «найти самые похожие векторы из словаря», её интересно позапускать просто чтобы понять, получается ли полный бред или не совсем, ну и забавно тоже бывает. Самые похожие векторы - это что-то вроде синонимов, но не совсем, точнее будет сказать «слова, которые часто употребляются в таком же контексте». Например, к слову «комендантский» ближайшие векторы получаются «урочный», «ровен», «предрассветный» и т.д., очевидно потому, что это всё выражения «___ час».
Одна пара запросов мне очень понравилась:
model.most_similar(u'интеллектуал')
[('моралист', 0.7139864563941956),
('теоретик', 0.6941959857940674),
('литератор', 0.6819325089454651),
('фанатик', 0.6814083456993103),
('эрудит', 0.6789889335632324),
('демагог', 0.6755205988883972),
('марксист', 0.6714329719543457),
('рационалист', 0.6712930202484131),
('авантюрист', 0.6707291603088379),
('революционер', 0.6677388548851013)]
model.most_similar(u'интеллектуалка')
[('бездельница', 0.6617184281349182),
('бунтарка', 0.6578608751296997),
('дилетантка', 0.6419748663902283),
('скромница', 0.6378872990608215),
('вертихвостка', 0.6353027820587158),
('профурсетка', 0.6342650055885315),
('карьеристка', 0.6335839629173279),
('сумасбродка', 0.6256570816040039),
('провинциалка', 0.6232886910438538),
('пуританка', 0.621334433555603)]
Богатое слово «профурсетка», я его уж и позабыл практически. Ещё можно складывать и вычитать векторы, иногда получается разумно; классический пример - "король"+"женщина"-"мужчина" ~= "королева", но у меня такого не особо получается, наверное потому, что в русском на это всё ещё роды существительных накладываются. Но иногда с гендерными ролями тоже полный порядок:
model.most_similar(positive=[u'интеллектуал', u'женщина'], negative=[u'мужчина'])
[('знаменитость', 0.49774518609046936),
('поп-звезда', 0.4860984981060028),
('элита', 0.48200151324272156),
('телезвезда', 0.4799540638923645),
('нация', 0.4705173075199127),
('идеология', 0.46679773926734924),
('душонка', 0.46596255898475647),
('историография', 0.4643760919570923),
('циркачка', 0.46430546045303345),
('особь', 0.4636017680168152)]
model.most_similar(positive=[u'ум', u'женщина'], negative=[u'мужчина'])
[('любовь', 0.43659064173698425),
('душа', 0.4330841302871704),
('внешность', 0.4280041456222534),
('бюрократия', 0.4279387295246124),
('автоматика', 0.4263702929019928),
('энергия', 0.4263441264629364),
('субстанция', 0.4225785732269287),
('душонка', 0.41732195019721985),
('сила', 0.41576558351516724),
('вода', 0.415403813123703)]
model.most_similar(positive=[u'гений', u'женщина'], negative=[u'мужчина'])
[('букашка', 0.4793989062309265),
('химера', 0.4589369595050812),
('душонка', 0.4547439217567444),
('композиция', 0.44240114092826843),
('персона', 0.4391207993030548),
('дива', 0.43585139513015747),
('разведчица', 0.4351191818714142),
('пылинка', 0.43426620960235596),
('женшина', 0.43287527561187744),
('программа', 0.43256744742393494)]
Вот такие у нас русскоязычные тексты. И ведь не скажешь, что подборка плохая, это весь lib.rus.ec. :)