Как правило, это должно рассматриваться как задача машинного обучения классификации. Вы можете использовать любое количество подходов от Наивного Байеса до Многослойного Перцептрона до DNN на основе softmax. Я настоятельно рекомендую использовать один из вышеперечисленных для таких задач, но, учитывая, что у вас есть только 350 вопросов, я понятия не имею, могут ли классификаторы учиться на таком небольшом количестве данных без экспериментов.
Однако, если вы хотите приблизиться к этому, используя методы, основанные на правилах, я бы предложил использовать парсинг зависимостей . Предполагается, что все ваши данные состоят из грамматически правильно сформулированных вопросов и что между тегами и вопросами существует семантическая связь.
Давайте используем синтаксический анализатор Стэнфордской зависимости здесь для вопроса: What is the nearest city to New York?
.
UNIVERSAL DEPENDENCIES:
root(ROOT-0, What-1)
cop(What-1, is-2)
det(city-5, the-3)
amod(city-5, nearest-4)
nsubj(What-1, city-5)
case(York-8, to-6)
compound(York-8, New-7)
nmod(city-5, York-8)
Как видите, nsubj
(номинальный субъект) говорит нам о связи между «Что» и «городом» (более подробно о зависимостях здесь ). Таким образом, каждый раз, когда у вас есть «город» как nsubj
слова «что» (скажем), вы можете выделить тег city_name
для вопроса.
Аналогичным образом, если «люди» находятся в nsubj
вопроса (и «многие» в amod
), возможно, вы могли бы выделить тег amount_of_people
для этого вопроса.
Вы должны были бы соблюдать и находить лучшие правила на основе зависимостей для каждого из 30 тегов аналогичным образом, и это определенно должно помочь.