Вопрос: задан фрагмент текста типа «Это тест»; как построить модель машинного обучения, чтобы получить количество вхождений слов, например, в этом фрагменте, количество слов равно 4. После обучения можно прогнозировать количество слов в тексте.
Я знаю, что это легко написать программа (как псевдокод ниже),
data: memory.punctuation['~', '`', '!', '@', '#', '$', '%', '^', '&', '*', ...]
f: count.word(text) -> count =
f: tokenize(text) --list-->
f: count.token(list, filter) where filter(token)<not in memory.punctuation> -> count
, однако в этом вопросе нам потребуется использовать алгоритм машинного обучения. Интересно, как машина может изучить концепцию count
(в настоящее время мы знаем, что машинное обучение хорошо в classification
). Есть идеи и предложения? Заранее спасибо.
Сбои:
Мы можем использовать sth как word2ve c (кодировщик) для построения векторов слов; если мы рассмотрим подход seq2seq, мы можем тренировать что-то вроде This is a test <s> 4 <e>
This is very very long sentence and the word count is greater than ten <s> 4 1 <e>
(4 1 для представления числа 14). Однако это не работает, поскольку модель внимания используется для получения аналогичного вектора, например для перевода текста (This is a test --> 这(this) 是(is) 一个(a) 测试(test)
). Трудно найти связь между [this
...] и 4
, которая представляет собой агрегированное число (то есть модель не сходится).
Мы знаем, что машинное обучение хорошо классифицирует. Если мы рассматриваем «4» как класс, количество классов бесконечно; если мы делаем хитрость и используем count/text.length
в качестве прогноза, у меня нет модели, которая бы подходила даже для набора обучающих данных (модель не сходится); например, если мы используем много коротких предложений для обучения модели, она не сможет предсказать длину длинного предложения. И это может быть связано с информационным парадоксом: we can encode data in a book as 0.x and use a machine to to mark a position on a rod to split it into 2 parts with length a and b, where a/b = 0.x; but we cannot find a machine
.