Чому в ідентифікації мови тексту замість слів використовується n-грам?


12

У двох популярних мовних ідентифікаційних бібліотеках, компактному детекторі мови 2 для C ++ та мовному детекторі для Java, обидві вони використовували (на основі символів) n-грамів для отримання тексту. Чому мішок слів (одне слово / словник) не використовується, і яка перевага та недолік мішок слів і n-грам?

Крім того, які ще є використання n-грамової моделі в класифікації тексту?

Ой, ой. Схоже, тут є подібне запитання: Що стосується використання біграмової (N-грамової) моделі для побудови функціонального вектора для текстового документа

Але чи може хтось дати більш вичерпну відповідь? Що краще у випадку ідентифікації мови?

.

Відповіді:


20

Я думаю, що найбільш детальні відповіді можна знайти у великій роботі Мехріяра Мохрі з цієї теми. Ось посилання на один зі слайдів його лекції на тему: http://www.cims.nyu.edu/~mohri/amls/lecture_3.pdf

Проблема виявлення мови полягає в тому, що людська мова (слова) мають структуру. Наприклад, англійською мовою дуже часто буквою "u" слід слідувати за літерою "q", хоча це не так у транслітерованій арабською мовою. n-грам працює, захоплюючи цю структуру. Таким чином, певні комбінації літер є більш імовірними в деяких мовах, ніж в інших. Це основа класифікації n грамів.

З іншого боку, сукупність слів залежить від пошуку за великим словником і по суті відповідності шаблонів. Тут є два основні недоліки: 1) кожна мова повинна мати у своєму розпорядженні обширним словником слів, який потребуватиме відносно тривалого часу для пошуку, і 2) мішок слів вийде з ладу, якщо жодне зі слів у навчальний набір входить в комплект тестування.

Якщо припустити, що ви використовуєте біграми (n = 2) і в вашому алфавіті є 26 літер, то для цього алфавіту є лише 26 ^ 2 = 676 можливих біграм, багато з яких ніколи не виникнуть. Тому для "профілю" (для використання слів детектора мови) для кожної мови потрібна дуже мала база даних. Класифікатору сумкових слів, з іншого боку, знадобиться повний словник для мови EACH, щоб гарантувати, що мова може бути виявлена ​​на основі того, який вирок їй було надано.

Отже, коротше - кожен мовний профіль можна швидко створити за допомогою відносно невеликого простору функцій. Цікаво, що n-грами працюють лише тому, що літери не малюються мовою в мові - це явно важелі.

Примітка: загальне рівняння для кількості n-грам для слів - l ^ n, де l - кількість літер в алфавіті.


Я думаю, що для деяких близьких мов допоможе використання списків слів на додаток до n-грамів. Я бачив, іноді, норвезький текст, класифікований як датський. Сумніваюсь, n-грам - це хороший спосіб відрізнити ці дві мови.
kjetil b halvorsen

Дякую за детальну відповідь. Однак у мене є кілька запитань щодо цього, по-перше, чи можете ви пояснити, що "сумка слів не вийде, якщо жодне зі слів навчального набору не буде включено до тестового набору"? по-друге, чому CLD2 використовує 4-грамові, що призведе до 456976 записів для англійської мови, якщо використання методу словника може скласти приблизно половину розміру профілю ( oxforddic slova.com/words/… )?
dennis97519

1
@ dennis97519 re: "сумка слів ..." Припустимо, ваш словник складається лише з слів {"собака", "кішка", "черепаха", "тварина"} для англійської мови і {"перро", "гато" , "тортуга", "тварина"} для іспан. У вашому словнику не вдалося б класифікувати таке речення: "Віслюк - тварина", оскільки слово "тварина" є в обох словниках, але жодного іншого слова не існує. Це крайній приклад. Повторне 4-грамове: 1) Пам’ятайте, що вам потрібен словник для кожної мови; 2) n-грами мають тенденцію до розрідженого (швидший пошук) та 3), як сказав Дугал, вони можуть бути представлені лише в декількох байтах.
justaTHERbrain

1
@loretoparisi - Є два компроміси: перший - між складністю моделі (великий N = складніший) та помилкою узагальнення (наскільки добре ви це робите в якомусь тестовому наборі) - ви не хочете перевитрати. Другий компроміс - обчислювальна складність. Складність пам'яті зростає в експоненціальному відношенні до N. Навчання, як правило, лінійне з кількістю слів у тексті, тому мати дуже довгий текст зазвичай не є проблемою. Однак, великий текст часто означає більше слів у вашому словнику D. Отже, знову ж таки, складність пам’яті становить O (D ^ N). На практиці, як правило, найкраще використовувати якомога більше обчислювальних значень N.
justaTHERbrain

1
@loretoparisi - Слідкуючи за цим, як було сказано раніше, N-грами мають тенденцію бути рідкими, але це не завжди так. Якщо він обмежений для вашого конкретного тексту, то перехресне підтвердження з різними N найкращим підходом для пошуку оптимального N (знову ж таки, з обчислювальними обмеженнями).
justaTHERbrain

3

Буква N-грам використовується замість слів з кількох причин:

1) Список слів, необхідних для даної мови, досить великий, можливо, 100 000, якщо ви вважаєте швидкий, швидший, найшвидший, швидкий, швидкий, пости, ... як усі різні слова. Для 80 мов вам потрібно приблизно 80 разів стільки слів, займаючи багато місця - 50+ мегабайт.

2) Кількість літер триграм для алфавіту з 26 літер становить 26 ** 3 або приблизно 17 000, а для квадраграм (N = 4) близько 450 000, які охоплюють ВСІ мови, що використовують цей алфавіт. Аналогічні, але дещо більші числа для N-грамів у більших алфавітах розміром 30-100 символів. Для мов CJK, що мають 4000+ літер у сценарії Han, достатньо уніграм (N = 1). Для деяких скриптів Unicode існує лише одна мова на скрипт (грецька, вірменська), тому комбінації літер не потрібні (так звані нульові грами N = 0)

3) За словами, у вас взагалі немає інформації, коли слово не в словнику, тоді як з буквою N-грам у вас часто є хоча б кілька корисних комбінацій літер у цьому слові.

CLD2 використовує квадраграми для більшості скриптів Unicode (алфавітів), включаючи латинську, кириличну та арабську мови, уніграми для скриптів CJK, ніграми для інших сценаріїв, а також включає обмежену кількість досить відмінних і досить поширених повних слів і пар слів для розрізнення. у складних групах статистично схожих мов, таких як індонезійська та малайська. Буквені діаграми та триграми, можливо, корисні для розрізнення крихітної кількості мов (приблизно вісім, див. Https://docs.google.com/document/d/1NtErs467Ub4yklEfK0C9AYef06G_1_9NHL5dPuKIH7k/edit), але марні для розрізнення десятків мов. Таким чином, CLD2 використовує квадраграми, асоціюючи з кожною буквою комбінацію трійки найімовірніших мов, що використовують цю комбінацію. Це дозволяє охопити 80 мов приблизно 1,5 МБ таблиць і 160 мов більш детально, приблизно 5 Мб таблиць.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.