Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Классификация текстовых документов с помощью Oracle Data Mining и Oracle Text / 4 сообщений из 4, страница 1 из 1
01.12.2009, 18:54
    #36341912
Dmitrych-G
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Классификация текстовых документов с помощью Oracle Data Mining и Oracle Text
Поставлена задача классификация документов средствами Oracle Text и Oracle Data Mining.
В базе инфа о документах хранится в одной таблице, содержимое документов в другой в поле CLOB, крутится база на 11gR1 под виндой.

Делаю все на PL/SQL по сэмплам отсюда .
Там есть пример когда для классификации используется таблица с разнородными колонками, в числе которых и текст, приведен пример для метода SVM (опорных векторов), я же использую только колонку с текстом для классификации.
Выделяю строки с содержимом документов для обучения в отдельную таблицу, создаю индекс CTXSYS.CONTEXT с такими параметрами:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    CTX_DDL.CREATE_PREFERENCE('my_LEXER', 'BASIC_LEXER');
    ctx_ddl.set_attribute('my_LEXER','INDEX_STEMS','ENGLISH'); 
    ctx_ddl.set_attribute('my_LEXER','index_text','YES');       
    
    CTX_DDL.CREATE_PREFERENCE('my_WORDLIST', 'BASIC_WORDLIST');
    ctx_ddl.set_attribute('my_WORDLIST','stemmer','ENGLISH');
    ctx_ddl.set_attribute('my_WORDLIST','substring_index','FALSE');
    ctx_ddl.set_attribute('my_WORDLIST','prefix_index','FALSE');
    
    CTX_DDL.CREATE_STOPLIST('my_STOPLIST','BASIC_STOPLIST');
Ну и далее, выделение термов и создание таблицы с колонкой NESTED_TABLE, содержащей термы для каждого документа и колонкой c целевым значением категории (target_column). В итоге табличка для построения модели имеет вид:
Код: plaintext
1.
2.
3.
4.
5.
CREATE TABLE "TEXT_BUILD_NESTED" 
	("DOC_ID" NUMBER( 6 , 0 ) NOT NULL ENABLE,		-- ID документа
	"CAT_ID" NUMBER, 				-- ID категории документа
	"DOC_TEXT" "SYS"."DM_NESTED_NUMERICALS" )  	-- термы (слова), выдранные из текста документа
	NESTED TABLE "DOC_TEXT" STORE AS "BUILD_TEXT" RETURN AS VALUE
Далее происходит построение модели классификации:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    DBMS_DATA_MINING.CREATE_MODEL(
      model_name => 'Classification_model'
      mining_function => dbms_data_mining.classification,
      data_table_name => 'text_build_nested',
      case_id_column_name => 'doc_id',
      target_column_name => 'cat_id',
      settings_table_name => 't_settings');
Таблица t_svmc_settings заполнена следующими настройкми:
Код: plaintext
1.
2.
3.
4.
    INSERT INTO t_settings VALUES
      (dbms_data_mining.algo_name, dbms_data_mining.algo_support_vector_machines);
    INSERT INTO t_settings VALUES 
      (dbms_data_mining.svms_kernel_function,dbms_data_mining.svms_linear);
Модель строится. Затем, подготовив должным образом текст документов для классификации (по аналогии с подготовкой данных для обучения, с тем же текстовым индексом), применяем модель к набору документов.
В итоге классификация текстов работает, и довольно неплохо, надо сказать.

Но стоит только поменять настройки для построение модели методом Naive bayes:
Код: plaintext
1.
2.
3.
4.
    INSERT INTO t_settings VALUES
      (dbms_data_mining.algo_name, dbms_data_mining.algo_naive_bayes);
    INSERT INTO t_settings VALUES
      (dbms_data_mining.clas_priors_table_name,'category_priors');
И получается то, что при классификации, документ относится ко всем категориям с равной вероятностью (по сути классификация не работает).

Если же классифицировать не по текстовому полю, а по другим значениям (например, number и т.п.), работает как классификация методом опорных векторов, так и наивным байесом. Причем в "Oracle® Data Mining Concepts 11g Release 1 (11.1) B28129-04" указывается что вроде как Oracle Data Mining должен поддерживать классификацию текста методом Naive Bayes, a Oracle Text нет... (может тут где-то собака зарыта, но ведь использую я пакет DBMS_DATA_MINING):

Mining Function Oracle Data Mining Oracle Text
Classification Text or mixed data can be mined using SVM, Text can be mined using SVM,
GLM, or Naive Bayes decision trees, or user-defined rules

Может кто нибудь сталкивался с подобным!? Не уверен что привел достаточно подробные сведения, но могу уточнить... В частности интересует вопрос, работает ли вообще у кого-нибудь классификация текста наивным байесом? Уже исхитрялся и так и эдак, а он все равно равновероятный результат выдает, стоит только оставить для построения модели чисто текстовые данные.
...
Рейтинг: 0 / 0
05.03.2010, 17:30
    #36505474
Dmitrych-G
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Классификация текстовых документов с помощью Oracle Data Mining и Oracle Text
Итак, решение было найдено еще в начале января, только вот руки не доходили написать сообщение:) Может кто-то найдет через поисковик...

Дело оказалось в глючной версии оракла 11.1.0.6, на 11.1.0.7 тот же самый код для построения модели классификации методом Байеса, без каких-либо изменений, прекрасно работает. Модель строится с вменяемыми коэффициентами для термов и нормально классифицирует тексты. Вот так.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
09.08.2013, 13:44
    #38360850
tociacla
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Классификация текстовых документов с помощью Oracle Data Mining и Oracle Text
Добрый день, уважаемый Dmitrych-G !
Извините пожалуйста за оффтоп, но не могли бы Вы предоставить более полный пример построения SVM модели в Oracle запросом? В частности, я не понимаю, что нужно указать в качестве settings_table_name: какая это должна быть таблица, с какими полями, с какими данными? Может быть, Вы можете скинуть ссылку на какое-либо руководство? Ничего не могу нагуглить((((
Заранее спасибо!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
15.12.2020, 18:18
    #40028101
ZiB
ZiB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Классификация текстовых документов с помощью Oracle Data Mining и Oracle Text
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Классификация текстовых документов с помощью Oracle Data Mining и Oracle Text / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]