2013-05-29 3 views
5

Итак, я работал над проектом обработки естественного языка, в котором мне нужно классифицировать различные стили написания. Предполагая, что семантические функции из текстов уже были извлечены для меня, я планирую использовать Weka в Java для обучения классификаторов SVM с использованием этих функций, которые могут использоваться для классификации других разных текстов.Обработка естественного языка - преобразование текстовых функций в векторы объектов

У меня возникли проблемы с тем, что для обучения SVM функции должны быть преобразованы в вектор-функцию. Я не уверен, как вы могли бы представлять такие функции, как богатство словарного запаса, n-граммы, пунктуацию, количество абзацев и длину абзаца в виде чисел в векторе. Если кто-то может указать в правильном направлении, это было бы весьма полезно.

+0

Не уверен, что именно вы ищете, но, надеюсь, мой маленький пример поможет вам. Удачи. –

ответ

5

Я не уверен, какие значения ваши атрибуты могут взять на себя, но, возможно, этот пример поможет вам:

Предположим, что мы проводим контролируемую учебный эксперимент, чтобы попытаться определить, если период знаменует собой конец предложения или нет, EOS и NEOS соответственно. Данные обучения пришли из обычных предложений в формате стиля абзаца, но были преобразованы в следующей векторной модели:

  • Колонка 1: Класс: Конца приговоре, или не Конца приговоре
  • Колонны 2-8: +/- 3 слова, относящиеся к рассматриваемому периоду
  • Столбцы 9,10: Число слов слева/справа, соответственно, периода до следующего надежного разделителя предложений (например,?,! Или маркер абзаца).
  • Столбец 11: Количество пробелов после периода.

Конечно, это не очень сложная проблема для решения, но это небольшое небольшое введение в Weka. Мы не можем просто использовать слова как функции (действительно высокое пространственное пространство), но мы можем использовать их теги POS (часть речи). Мы также можем извлечь длину слов, независимо от того, было ли это слово заглавным и т. Д.

Таким образом, вы можете накормить все как тестовые данные, если сможете преобразовать их в векторную модель выше и извлечь функции, используемые в .arff.

Следующая (очень малая часть) .arff файл был использован для определения того, отмечен период в предложении конца или нет:

@relation period 

@attribute minus_three {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute minus_three_length real 
@attribute minus_three_case {'UC','LC','NA'} 
@attribute minus_two {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute minus_two_length real 
@attribute minus_two_case {'UC','LC','NA'} 
@attribute minus_one {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute minus_one_length real 
@attribute minus_one_case {'UC','LC','NA'} 
@attribute plus_one {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute plus_one_length real 
@attribute plus_one_case {'UC','LC','NA'} 
@attribute plus_two {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute plus_two_length real 
@attribute plus_two_case {'UC','LC','NA'} 
@attribute plus_three {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute plus_three_length real 
@attribute plus_three_case {'UC','LC','NA'} 
@attribute left_before_reliable real 
@attribute right_before_reliable real 
@attribute spaces_follow_period real 
@attribute class {'EOS','NEOS'} 

@data 

VBP, 2, LC,NP, 4, UC,NN, 1, UC,NP, 6, UC,NEND, 1, NA,NN, 7, LC,31,47,1,NEOS 
NNS, 10, LC,RBR, 4, LC,VBN, 5, LC,?, 3, NA,NP, 6, UC,NP, 6, UC,93,0,0,EOS 
VBD, 4, LC,RB, 2, LC,RP, 4, LC,CC, 3, UC,UH, 5, LC,VBP, 2, LC,19,17,2,EOS 

Как вы можете видеть, каждый атрибут может принимать любые вы хотите, чтобы:

  • real обозначает реальное число
  • Я составленную LC и UC для обозначения прописные и строчные буквы, соответственно
  • Большинство других значений являются POS теги

Вы должны выяснить, что именно ваши особенности, и какие значения вы будете использовать для представления/классифицировать их. Затем вам необходимо преобразовать данные в формат, определенный вашим .arff.

Чтобы коснуться вопроса о пунктуации, предположим, что у нас есть предложения, которые заканчиваются на . или ?.Вы можете иметь атрибут Punc, который принимает два значения:

@attribute punc {'p','q'} 

Я не использовал ?, потому что это то, что (условно) присваивается, когда точка данных отсутствует. Наше вы могли бы иметь логические атрибуты, указывающие, есть ли персонаж или что вы присутствовали (с 0, 1 или false, true). Другой пример, но для качества:

@attribute quality {'great','good', 'poor'} 

Как вы определяете, какая классификация зависит от вас, но выше вы должны начать. Удачи.

+0

Я старался быть как можно более подробным, но я на планшете - это сложно. –

Смежные вопросы