Прогнозное распределение из модели kenlm ngram: как перебирать весь словарь? ⇐ C++
Прогнозное распределение из модели kenlm ngram: как перебирать весь словарь?
Я пытаюсь получить прогнозируемое распределение возможных следующих слов в предложении с учетом предыдущих слов из модели ngram через kenlm. Я придумал, как сделать что-то близкое к этому, адаптировав Query() из ngram_query.hh, как показано ниже, но это требует от меня иметь отдельный источник словаря, который я хочу исследовать. Что я могу и что хочу сделать, указано в комментариях в списке.
Меня останавливает то, что я не могу найти, как выполнить (как должно быть) две простейшие операции: запросить количество известных слов в словаре (помечено ниже NUMBER_OF_WORDS_KNOWN()) и выполнить обратный поиск строк слов с помощью WordIndex (отмечен WORD_STRING() ниже). Я думаю, что любая другая форма итерации тоже подойдет (не обязательно через целое число ++), если она является исчерпывающей и я получаю доступ к строкам.
Я рылся в исходниках C++, но они очень быстро становятся запутанными и недокументированными. В vocab.hh я нашел реализацию SortedVocabulary::Index(), которая, судя по всему, работает с хешем — это, возможно, предполагает, что обратный поиск невозможен, хотя Я не могу быть уверен.
Возможно ли это? Если да, то как?
шаблон недействительный прогноз( константная модель и модель, const std::vector и previousWords, const std::vector & ProbeWords // Я хочу избавиться от необходимости использования этого аргумента ) { typename Model::State state, out; // Обработка предыдущего контекста for(const auto &eachPrecedingWord: previousWords) { lm::WordIndex wordID = model.GetVocabulary().Index(eachPrecedingWord); model.FullScore(состояние, wordID, выход); состояние = выход; // обновляем состояние } //
Я пытаюсь получить прогнозируемое распределение возможных следующих слов в предложении с учетом предыдущих слов из модели ngram через kenlm. Я придумал, как сделать что-то близкое к этому, адаптировав Query() из ngram_query.hh, как показано ниже, но это требует от меня иметь отдельный источник словаря, который я хочу исследовать. Что я могу и что хочу сделать, указано в комментариях в списке.
Меня останавливает то, что я не могу найти, как выполнить (как должно быть) две простейшие операции: запросить количество известных слов в словаре (помечено ниже NUMBER_OF_WORDS_KNOWN()) и выполнить обратный поиск строк слов с помощью WordIndex (отмечен WORD_STRING() ниже). Я думаю, что любая другая форма итерации тоже подойдет (не обязательно через целое число ++), если она является исчерпывающей и я получаю доступ к строкам.
Я рылся в исходниках C++, но они очень быстро становятся запутанными и недокументированными. В vocab.hh я нашел реализацию SortedVocabulary::Index(), которая, судя по всему, работает с хешем — это, возможно, предполагает, что обратный поиск невозможен, хотя Я не могу быть уверен.
Возможно ли это? Если да, то как?
шаблон недействительный прогноз( константная модель и модель, const std::vector и previousWords, const std::vector & ProbeWords // Я хочу избавиться от необходимости использования этого аргумента ) { typename Model::State state, out; // Обработка предыдущего контекста for(const auto &eachPrecedingWord: previousWords) { lm::WordIndex wordID = model.GetVocabulary().Index(eachPrecedingWord); model.FullScore(состояние, wordID, выход); состояние = выход; // обновляем состояние } //
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение