Comments 39
Для нормализации можно использовать один из существующих стеммеров
Проще всего установить стеммер от Яндекса (yandex mystem), который достаточно хорошо работает с русскими словами и работает как сервис (все вычисления происходят на сервере)
Если кому интересно попробовать, исходник в CSV тут: cloud.mail.ru/public/GgYT/KEXDzixsS
Mystem.exe я вызываю локально из R. Вполне хорошо работает. Для питона рекомендую pymorphy2. Это вообще огонь.
А я раньше дергал из R питоновский pymorphy2, но потом обнаружил udpipe, который очень прилично работает с русским языком.
Еще один нюанс. Оказалось, что вызов основного лемматизирующего метода в udpipe не параллелится, потому что модель факт. лежит на диске и к ней осуществляется вызов по ссылке, получается ошибка. А это очень жаль, потому что хотелось бы параллельное исполнение, ибо материала очень много. Я пробовал это с помощью doParallel если что.
Не быстро, но дадут)
awk -F "," 'BEGIN {i=0} {if ($3 ~ /Redis/) {print $1 " " $3 " " $2;i++}} END {print "Total: " i "/" NR}' habr_all.txt
# coding: utf-8
import pymorphy2
import string
class Normalizer(object):
def __init__(self, space_chars='\t\n\r', strip_chars=string.punctuation, min_word_len=3):
self.min_word_len = min_word_len
self.parser = pymorphy2.MorphAnalyzer()
self.translator = str.maketrans(space_chars, ' '*len(space_chars), strip_chars)
def normalize(self, sentense):
sentense = sentense.translate(self.translator)
words = sentense.split(' ')
norm_words = [
self.parser.parse(word)[0].normal_form for word in words
if len(word) >= self.min_word_len
]
return norm_words
norm = Normalizer()
print(norm.normalize('Хабрамегарейтинг: лучшие статьи и статистика Хабра за 12 лет. Часть 2/2'))
# >>> ['хабрамегарейтинг', 'хороший', 'статья', 'статистика', 'хабра', 'год', 'часть']
Давайте 3 часть: предсказание рейтинга публикации по тексту публикации, с токенизайией, ембеддингом и deep learning ом.
It's doable. Я реализовал эту идею в ТАССе: модель предсказывает рейтинг статей. Про остальное попозже отвечу.
С текстом посложнее. Как вариант текст будет многомерным временным рядом и обучаться будет рекурр.сеть. Как там оптимизировать входы это вопрос. Даже если все получится, не факт, что «оптимальный» с тчк.зр. нейронки текст вообще будет читаться. Но вопрос интересный, да. Как минимум, можно написать класс «новость» (хе хе я уже мыслю как на работе), который будет содержать метод перестановки абзацев и предложений, да и слов в предложении. Рекуррентная сетка будет давать разный отклик на один и тот же текст с разным позиционированнием слов.
Ну, вот, пользователь читает ПРЕДЛОЖЕНИЯ. Например, «ии от компании х выиграл у людей в игре z. Тут все важно, комбинация слов важна, то есть, предложение. Сама по себе тема ИИ уже оскомину набила. Компания какая-то мало кому известна, игре уже 20 лет, а игроки сотнями партий проигрывают. Но в связке, можно сказать, максимизирует счастья энтропия предложения. Вот как это выделить в виде фактора требующего улучшения вопрос хороший.
Но в связке, можно сказать, максимизирует счастья энтропия предложения. Вот как это выделить в виде фактора требующего улучшения вопрос хороший.А как существующая модель предсказания рейтинга выделяет? Или она не учитывает такую энтропию, а делает прогноз по другим параметрам и другим предложениям?
И не менее интересный вопрос: от чего в основном зависит рейтинг? Если смотреть по комментам, то у меня с большим отрывом от прочих моих комментов идет:
> как вы проверите?
Подключим центрифугу и посмотрим нормально ли она работает:)
Ну, удачно пошутил и не более того. Может удачная шутка в статье гораздо важнее оскомины от темы?
А как существующая модель предсказания рейтинга выделяет? Или она не учитывает такую энтропию, а делает прогноз по другим параметрам и другим предложениям?
моя модель работает на векторном представлении СЛОВ, которые образуют естественные последовательности, обрабатываются как обычный временной ряд рекурретной сетью. Интуиция здесь отпадает потому что это просто игра в цифирь. Нейронка видит например вектор слов (которые сами вектора) длиной 300 пропускает это дело через рекуррентный слой, а на выходе решает регрессионную задачу минимизации СКО ошибок. То есть тут нет мега крутой философии и логики, просто текста как оказалось содержат информацию о своем рейтинге )))
Если подставлять разные последовательности слов и предложений НС выдает разный результат даже для текстов с одним и тем же смыслом. То есть это более гибкий подход, чем, например, старый добрый мешок слов, где поф. на последовательность, а важна частота термина.
Интуиция здесь отпадает потому что это просто игра в цифирь. Нейронка видит например вектор слов (которые сами вектора) длиной 300 пропускает это дело через рекуррентный слой, а на выходе решает регрессионную задачу минимизации СКО ошибок. То есть тут нет мега крутой философии и логикиФилософия однако есть — интересный философский вопрос: почему предсказывает правильно (м.б. не всегда), если «просто игра в цифирь»? Если логически труднообъяснимо, то философски еще более интересно ;)
А с нейронкой не так просто. Там очень сложная вложенная формула с сотнями нелинейных функций и тысячами параметров. Сложно разобрать.
Ok. Ожидаемый ответ. Часто отмечают:
Нейросети известны своей непостижимостью – компьютер может выдать хороший ответ, но не сможет объяснить, что привело его к такому заключению.
Вики пишет:
Иску́сственная нейро́нная се́ть (ИНС) — математическая модель, а также её программное или аппаратное воплощение, построенная по принципу организации и функционирования биологических нейронных сетей — сетей нервных клеток живого организма.Однако строго не доказано, что это достаточно полная и адекватная модель, и что мозг человека работает так, как модельная нейросеть. Просто мы недостаточно знаем, как он работает.
Многие задачи могут быть решены разными способами. Нпр, тут я привел не-ИИ решение задачи, которую ранее решали генетическим алгоритмом.
Другой более известный пример на эту тему. М.М.Ботвинник безуспешно пытался научить ЭВМ игре в шахматы. Так как играет он сам. Потом это удалось с помощью альфа-бета алгоритма. Но не один живой шахматист не использует альфа-бету.
Я хотел попробовать подход прозрачный ящикНепросто будет найти такой эффективный подход.
Не все обязательно решать НС. Но ее мощь велика. Точной теории почему она работает нет, но ясно, что там моделируются нелинейные зависимости, а градиентный спуск почти всегда даёт приемлемый ответ.
Но ее мощь велика.
Да.
Точной теории почему она работает нет
Важное замечание.
градиентный спуск почти всегда даёт приемлемый ответКлючевое слово "почти всегда". Действительно, если модель не всегда, а в 90 случаев из 100 будет давать верный прогноз рейтинга статьи — это будет отличный результат. И вопрос
почему нейронным сетям повсюду мерещатся овцыбудет выглядеть скорее теоретически-философским, чем практическим. От десятка неверных прогнозов катастрофы не произойдет. Но вот если робомобиль в 10 случаев из 100 не сможет объехать пешехода, то такой результат вряд ли стоит считать приемлемым. Ситуацию можно сравнить с эвристическими алгоритмами (не обязательно из области ИИ): для многих задач приемлемо, если алгоритм не всегда, но достаточно часто дает верное решение. При этом корректность такого алгоритма не доказывается: может потому, что автор не смог придумать доказательства (может оно и в принципе невозможно), а может и потому, что автору просто лень возиться с доказательством ;)
Обсуждение QIP, инвайтов на Google+, множество других устаревших материалов…
Вот лично мне реально интересно, сможет ли НС научиться меняющимся моде и духу самого сообщества, включая также меняющийся лексикон и просто привычки. Юмор туда же. Думаю, хорошая статья, набравшая много лайков, затрагивает глубинные чувства людей (масс) и разговаривает на их языке. По этому принципу можно наклепать до черта материалов, которые будут просто приятным чтивом.
Если нейронка сможет обобщать эти абстракции то это будет большой вин для машин.обуч.
А код запросов на синхронном питоне?
Просто для такого кол-ва запросов было бы неплохо асинхронный Python(aiohttp) или вообще на чем-нибудь быстрее питоне
Кстати, заметил два дубликата в списке по относительному рейтингу: «Про системного администратора, обыски...» и «Русский н##бизнес».
Я оставил дубль т.к. сам эффект мне показался интересным, я например не знаю как редирект со статьи на статью сделать. Возможно некоторые популярные статьи перевыкладываются редакцией периодически.
В то же время на английском есть про фильтры Калмана и каринг в C++14, хотя статьи на английском появились относительно недавно.
Хабрамегарейтинг: лучшие статьи и статистика Хабра за 12 лет. Часть 2/2