Система подсчета очков - взвешенный механизм?

Я пытаюсь проверить ряд слов, которые предоставляются пользователями. Я пытаюсь придумать систему подсчета очков, которая определит вероятность того, что серия слов действительно действительные слова.

Предположим, что следующий вход:

xxx yyy zzz

Первое, что я делаю, это проверить каждое слово отдельно от базы данных слов, которые у меня есть. Итак, скажем, что xxx находилось в базе данных, поэтому мы на 100% уверены, что это действительное слово. Тогда скажем, что yyy не существует в базе данных, но существует возможная вариация его написания (скажем yyyy). Мы не даем yyy 100%, но, возможно, что-то ниже (допустим, 90%). Тогда zzz просто не существует вообще в базе данных. Итак, zzz получает оценку 0%.

Итак, у нас есть что-то вроде этого:

xxx = 100%
yyy = 90%
zzz = 0%

Предположим, что пользователи либо будут либо:

  • Содержит список всех допустимых слов (скорее всего)
  • Укажите список всех недопустимых слов (скорее всего)
  • Содержит список комбинаций допустимых и недопустимых слов (маловероятно)

В целом, что такое хорошая система подсчета очков, чтобы определить показатель доверия, который xxx yyy zzz представляет собой серию допустимых слов? Я не ищу ничего слишком сложного, но получение среднего значения не кажется правильным. Если некоторые слова в списке слов действительны, я думаю, что это увеличивает вероятность того, что слово, не найденное в базе данных, также является фактическим словом (это просто ограничение базы данных, в котором оно не содержит этого конкретного слова).

ПРИМЕЧАНИЕ. Вход обычно будет состоять как минимум из 2 слов (и в основном из 2 слов), но может быть 3, 4, 5 (и, возможно, даже больше в некоторых редких случаях).

Ответ 1

EDIT. Я добавил новый раздел, посвященный распознаванию групп слов на английском и неанглийском языках. Это ниже раздела, посвященного оценке того, является ли данное слово английским.


Я думаю, вы понимаете, что система подсчета очков, которую вы здесь объяснили, не вполне оправдывает эту проблему.

Хорошо найти слова, которые есть в словаре - эти слова могут сразу дать 100% и пройти, но как насчет несогласованных слов? Как вы можете определить их вероятность? Это можно объяснить простым сравнением предложений, содержащих точно такие же буквы:

  • Получено abergrandly wuzkinds
  • Erbdnerye wcgluszaaindid vker

Ни одно предложение не имеет английских слов, , но первое предложение выглядит по-английски - это может быть кто-то (Abergrandly), который получил (была орфографическая ошибка) несколько предметов (wuzkinds). Второе предложение - это просто мой ребенок, попавший на клавиатуру.

Итак, в приведенном выше примере, несмотря на отсутствие английского слова, вероятность, которую он произнесла английским докладчиком, высока. Второе предложение имеет вероятность 0% быть английским.

Я знаю пару эвристик, чтобы помочь обнаружить разницу:

Простой частотный анализ букв

A typical distribution of letters in English. From Wikipedia

На любом языке некоторые буквы встречаются чаще, чем другие. Простое подсчет частоты каждой буквы и сравнение ее со средним языком говорит нам много.

Существует несколько способов рассчитать вероятность от него. Можно было бы:

  • Получение
  • Тест
    • Подсчитайте количество вхождений каждой буквы в фразе, чтобы проверить
    • Вычислить Линейная регрессия, где координата каждой буквенной точки:
      • Ось X: его предсказанная частота от 1,1 выше
      • Ось Y: фактическое количество
    • Выполните регрессионный анализ по данным
      • Английский должен сообщить о положительном значении r, близком к 1.0. Вычислите R ^ 2 как вероятность того, что это английский.
      • Значение r из 0 или ниже либо не коррелирует с английским, либо буквы имеют отрицательную корреляцию. Вероятно, английский.

Преимущества:

  • Очень просто вычислить

Недостатки:

  • Не будет работать так хорошо для небольших образцов, например "зебра, ксилофон"
  • "Rrressseee" будет казаться весьма вероятным словом
  • Не различает два приведенных выше предложения.

частоты Bigram и частоты триграмм

Это расширение частот букв, но смотрит на частоту букв пары или триплетов. Например, u следует за q с частотой 99% (почему не 100%? Dafuq). Опять же, корпус NLTK невероятно полезен.

Digraph frequency based on a sample to 40,000 words

Выше: http://www.math.cornell.edu/~mec/2003-2004/cryptography/subs/digraphs.jpg

Этот подход широко используется во всей отрасли, во всем: от распознавания речи до интеллектуального текста на вашей мягкой клавиатуре.

Триграфы особенно полезны. Подумайте, что 'll' - очень распространенный орграф. Строка 'lllllllll' поэтому состоит только из обычных орграфов, а метод орграфа делает его похожим на слово. Триграфы разрешают это, потому что "lll" никогда не происходит.

Расчет этой вероятности слова с использованием триграфов не может быть выполнен с помощью простой модели линейной регрессии (подавляющее большинство триграмм не будет присутствовать в слове, и поэтому большинство точек будет на оси x), Вместо этого вы можете использовать цепочки Маркова (используя вероятностную матрицу либо битрамов, либо триграмм) для вычисления вероятности слова. Введение в цепи Маркова здесь.

Сначала построим матрицу вероятностей:

  • Ось X: каждый bigram ( "th", "he", "in", "er", "an" и т.д.)
  • Ось Y: буквы алфавита.
  • Элементы матрицы состоят из вероятности буквы алфавита, следующего за символом.

Чтобы начать вычислять вероятности с начала слова, орграфы оси X должны включать пробелы-a, пробел-b до пространства-z - например, орграф "пробел" t представляет собой слово, начинающееся с t.

Вычисление вероятности слова состоит из итерации над орграфами и получения вероятности третьей буквы с учетом орграфа. Например, слово "они" разбивается на следующие вероятности:

  • h после пробела t → вероятность x%
  • e после th → вероятность y%
  • y после него → вероятность z%

Общая вероятность = x * y * z%

Это вычисление решает проблемы для простого частотного анализа, выделяя "wcgl" как вероятность 0%.

Обратите внимание, что вероятность любого данного слова будет очень мала и станет статистически меньше между 10x и 20x за дополнительный символ. Однако, исследуя вероятность известных английских слов из 3, 4, 5, 6 и т.д. Символов из большого корпуса, вы можете определить отсечку, ниже которой слово маловероятно. Каждый очень маловероятный триграф снижает вероятность быть английским на 1-2 порядка.

Затем вы можете нормализовать вероятность слова, например, для 8-буквенных английских слов (я составил числа ниже):

  • Вероятности цепи Маркова:
    • Вероятность лучшего английского слова = 10 ^ -7 (10% * 10% *.. * 10%)
    • Cutoff (Вероятность наименее вероятного английского слова) = 10 ^ -14 (1% * 1% *.. * 1%)
    • Вероятность тестового слова (скажем, "coattail" ) = 10 ^ -12
  • "Нормализовать" результаты
    • Возьмите журналы: Best = -7; Тест = -12; Cutoff = -14
    • Сделать положительным: Best = 7; Тест = 2; Cutoff = 0
    • Нормализовать между 1.0 и 0.0: Best = 1.0; Тест = 0,28; Cutoff = 0.0
    • (Вы можете легко настроить верхнюю и нижнюю границы, например, между 90% и 10%)

Теперь мы рассмотрели, как получить лучшую вероятность, что любое данное слово является английским, давайте посмотрим на группу слов.

Определение группы - это минимум 2 слова, но может быть 3, 4, 5 или (в небольшом числе случаев) больше. Вы не упоминаете, что между словами есть какая-либо переопределяющая структура или ассоциации, поэтому я не предполагаю:

  • Что любая группа - это фраза, например "командир танка", "день красной буквы"
  • Что группа представляет собой предложение или предложение, например "Я хочу пить", "Мэри нуждается в электронной почте"

Однако, если это предположение неверно, проблема становится более доступной для более крупных текстовых групп, потому что слова будут соответствовать английским правилам синтаксиса - мы можем использовать, скажем, NLTK, чтобы проанализировать предложение, чтобы получить больше информации.


Глядя на вероятность того, что группа слов на английском

ОК, чтобы понять проблему, давайте рассмотрим различные варианты использования. В следующем:

  • Я буду игнорировать случаи всех слов или всех не-слов, поскольку эти случаи тривиальны
  • Я буду рассматривать английские слова, которые нельзя считать включенными в словарь, например, странные фамилии (например, Kardashian), необычные названия продуктов (например, stackexchange) и т.д.
  • Я буду использовать простые средние вероятности, полагая, что случайная бред - 0%, а английские слова - 90%.

Два слова

  • (50%) Red ajkhsdjas
  • (50%) Hkdfs Friday
  • (95%) Программа Кардашян
  • (95%) Использование Stackexchange

Из этих примеров, я думаю, вы согласитесь, что 1. и 2. вероятно, не приемлемы, тогда как 3. и 4. есть. Простой средний расчет представляется полезным дискриминатором для двух групп слов.

Три слова

С одним подозреваемым слова:

  • (67%) Красный рассвет dskfa
  • (67%) Коммунистический манифест Hskdkc
  • (67%) Экономический кризис jasdfh
  • (97%) Кардашян пятнадцать минут.
  • (97%) Опыт пользователя stackexchange

Ясно, что 4 и 5. приемлемы.

Но что насчет 1., 2. или 3.? Существуют ли какие-либо существенные различия между 1., 2. или 3.? Наверное, нет, исключая использование байесовской статистики. Но должны ли они классифицироваться как английский или нет? Я думаю, что ваш звонок.

С двумя подозреваемыми словами:

  • (33%) Red ksadjak adsfhd
  • (33%) jkdsfk dsajjds манифест
  • (93%) Электронная почта Stackexchange Kardashians
  • (93%) Учетная запись Kardashian для Stackexchange

Я бы рискнул, что 1. и 2. неприемлемы, но 3. и 4 определенно. (Ну, кроме того, что у Кардашян есть учетная запись здесь - это не сулит ничего хорошего). Снова простые средние можно использовать в качестве простого дискриминатора - и вы можете выбрать, превышает ли оно выше или ниже 67%.

Четыре слова

Количество перестановок начинает становиться диким, поэтому я приведу лишь несколько примеров:

  • Одно подозрительное слово:
    • (75%) Программирование языка jhjasd сегодня
    • (93%) Безупречная серия Kardashian tv
  • Два подозреваемых слова:
    • (50%) Программирование kasdhjk jhsaer сегодня
    • (95%) Stackexchange, реализующий фильтр Kasdashian.
  • Три подозрительных слова:
    • (25%) Программирование sdajf jkkdsf kuuerc
    • (93%) Stackexchange bitifying Kardashians tweetdeck

В моем сознании, он ясно, какие группы слов имеют смысл, выравнивается с простым средним значением, за исключением 2.1 - это снова ваш вызов.

Интересно, что точка отсечения для четырех групп слов может отличаться от трехсловных групп, поэтому я бы рекомендовал, чтобы ваша реализация имела разные настройки конфигурации для каждой группы. Наличие различных отсечек является следствием того, что квантовый скачок от 2- > 3, а затем 3- > 4 не мешает идее гладких непрерывных вероятностей.

Реализация различных значений отсечки для этих групп напрямую затрагивает вашу интуицию "Сейчас я просто чувствую, что мой пример xxx yyy zzz действительно должен быть выше 66,66%, но я не уверен, как его выразить как формулу.".

Пять слов

Вы поняли, что я больше не буду перечислять здесь. Однако, когда вы добираетесь до пяти слов, он начинает получать достаточную структуру, в которую могут войти несколько новых эвристик:

  • Использование байесовских вероятностей/статистики (какова вероятность того, что третье слово будет словом, учитывая, что первые два были?)
  • Разбор группы с использованием NLTK и просмотр ее грамматического смысла

Проблемные случаи

У английского языка есть несколько очень коротких слов, и это может вызвать проблему. Например:

  • Тарабарщина: r xu r
  • Это английский? Я

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

TL; Резюме DR

  • Не словарные слова могут быть проверены на предмет того, как "английский" (или французский или испанский и т.д.) они используют частоты букв и триграмм. Подбор английских слов и приписывание им высокой оценки имеет решающее значение для различения английских групп.
  • До четырех слов простое среднее имеет большую дискриминационную силу, но вы, вероятно, захотите установить другое обрезание на 2 слова, 3 слова и 4 слова.
  • Пять слов и выше вы можете начать использовать байесовскую статистику
  • Более длинные группы слов , если они должны быть предложениями или фрагментами предложения, могут быть протестированы с использованием инструмента естественного языка, такого как NLTK.
  • Это эвристический процесс и, в конечном счете, будут смешаться ценности (такие как "Я есть" ). Поэтому создание идеальной процедуры статистического анализа не может быть особенно полезно по сравнению с простым средним, если его можно смутить большим количеством исключений.

Ответ 2

Возможно, вы можете использовать формулу Байеса.

У вас уже есть численные догадки о вероятности того, что каждое слово будет реальным.

Следующий шаг - сделать обоснованные догадки о вероятности того, что весь список будет хорошим, плохим или смешанным (т.е. превратить "скорее всего", "вероятно" и "маловероятно" в числа.)

Ответ 3

Я дам решение байесовской иерархической модели. У него есть несколько параметров, которые должны быть заданы вручную, но они довольно надежны в отношении этих параметров, как показано ниже. И он может обрабатывать не только систему подсчета для списка слов, но и вероятную классификацию пользователя, который ввел слова. Лечение может быть немного техническим, но в итоге у нас будет рутина для вычисления баллов в зависимости от трех чисел: количества слов в списке, количества тех, у кого точное соответствие в базе данных, и число тех, у кого есть частичное совпадение (как в yyyy). Подпрограмма реализована в R, но если вы ее никогда не использовали, просто загрузите интерпретатор, скопируйте и вставьте код в консоль, и вы увидите результаты, показанные здесь.

Кстати, английский не мой первый язык, так что несите меня...: -)

1. Спецификация модели:

Существует 3 класса пользователей с именами I, II, III. Мы предполагаем, что каждый список слов генерируется одним пользователем и что пользователь нарисован случайным образом из юниверса пользователей. Мы говорим, что эта вселенная составляет 70% класса I, 25% класса II и 5% класса III. Разумеется, эти цифры могут быть изменены. Мы до сих пор

Проб [Пользователь = I] = 70%

Проб [Пользователь = II] = 25%

Проб [Пользователь = III] = 5%

Учитывая пользователя, мы предполагаем условную независимость, то есть пользователь не будет смотреть на предыдущие слова, чтобы решить, будет ли он вводить допустимое или недопустимое слово.

Пользователь я имеет тенденцию давать только действительные слова, User II - только недопустимые слова, а пользователь III смешан. Поэтому мы устанавливаем

Проб [Word = ОК | Пользователь = I] = 99%

Проб [Word = ОК | Пользователь = II] = 0,001%

Проб [Word = ОК | Пользователь = III] = 50%

Вероятности неверного слова, учитывая класс пользователя, являются бесплатными. Обратите внимание, что мы даем очень маленькую, но отличную от нуля вероятность того, что пользователь класса II вводит правильные слова, поскольку даже обезьяна перед машиной будет в конечном итоге напечатать действительное слово.

Последний шаг спецификации модели относится к базе данных. Мы предполагаем, что для каждого слова запрос может иметь 3 результата: полное совпадение, частичное совпадение (как в yyyy) или отсутствие соответствия. В терминах вероятности предположим, что

Проб [матч | valid] = 98% (не все достоверные слова будут найдены)

Prob [partial | valid] = 0.2% (редкое событие)

Проб [матч | INvalid] = 0 (база данных может быть неполной, но не имеет недопустимых слов)

Prob [partial | INvalid] = 0,1% (редкое событие)

Вероятности не найти слово не обязательно должны быть установлены, поскольку они являются бесплатными. Что это, наша модель установлена.

2. Обозначение и цель

Мы имеем дискретную случайную величину U, принимающую значения в {1, 2, 3} и два дискретных случайных вектора W и F, каждый из которых имеет размер n (= количество слов), где W_i равно 1, если слово valid и 2, если слово недействительно, а F_i равно 1, если слово найдено в базе данных, 2, если это частичное совпадение и 3, если оно не найдено.

Наблюдается только вектор F, остальные - скрыты. Используя теорему Байеса и распределения, которые мы установили в спецификации модели, мы можем вычислить

(a) Prob [User = я | F]

я. e), задняя вероятность того, что пользователь находится в классе I, учитывая наблюдаемые соответствия; и

(b) Prob [W = все действительные | F]

я. e., задняя вероятность того, что все слова верны, учитывая наблюдаемые соответствия.

В зависимости от вашей цели вы можете использовать тот или иной инструмент для оценки. Если вы заинтересованы в том, чтобы отличить реального пользователя от компьютерной программы, например, вы можете использовать (a). Если вам все равно, что список слов действителен, вы должны использовать (b).

Я попытаюсь кратко объяснить теорию в следующем разделе, но это обычная настройка в контексте байесовских иерархических моделей. Ссылка Gelman (2004), "Байесовский анализ данных".

Если вы хотите, вы можете перейти к разделу 4 с кодом.

3. Математика

Я использую небольшое злоупотребление нотацией, как обычно в этом контексте, пишу

p (x | y) для Prob [X = x | Y = y] и p (x, y) для Prob [X = x, Y = y].

Цель (а) - вычислить p (u | f), для u = 1. Используя теорему Байеса:

p (u | f) = p (u, f)/p (f) = p (f | u) p (u)/p (f).

p (u). p (f | u) получается из:

p (f | u) =\prod_ {i = 1} ^ {n}\sum_ {w_i = 1} ^ {2} (p (f_i | w_i) p (w_i | u))

p (f | u) =\prod_ {i = 1} ^ {n} p (f_i | u)

= p (f_i = 1 | u) ^ (m) p (f_i = 2 | u) ^ (p) p (f_i = 3) ^ (n-m-p)

где m = количество совпадений и p = число парных совпадений.

p (f) рассчитывается как:

\ sum_ {u = 1} ^ {3} p (f | u) p (u)

Все это можно вычислить напрямую.

Цель (b) задается

p (w | f) = p (f | w) * p (w)/p (f)

где

p (f | w) =\prod_ {i = 1} ^ {n} p (f_i | w_i)

и p (f_i | w_i) указывается в спецификации модели.

p (f) вычислялось выше, поэтому нам нужно только

p (w) =\sum_ {u = 1} ^ {3} p (w | u) p (u)

где

p (w | u) =\prod_ {i = 1} ^ {n} p (w_i | u)

Итак, все установлено для реализации.

4. Код

Код записывается как R script, константы устанавливаются в начале, в соответствии с тем, что обсуждалось выше, а выход задается функциями

(a) p.u_f (u, n, m, p)

и

(b) p.wOK_f (n, m, p)

которые вычисляют вероятности для опций (a) и (b), с учетом входов:

u = желаемый класс пользователя (установлен на u = 1)
n = количество слов
m = количество совпадений
p = число парных совпадений

Сам код:

### Constants:

# User:

# Prob[U=1], Prob[U=2], Prob[U=3]

Prob_user = c(0.70, 0.25, 0.05)

# Words:

# Prob[Wi=OK|U=1,2,3]

Prob_OK = c(0.99, 0.001, 0.5)

Prob_NotOK = 1 - Prob_OK

# Database:

# Prob[Fi=match|Wi=OK], Prob[Fi=match|Wi=NotOK]:

Prob_match = c(0.98, 0)

# Prob[Fi=partial|Wi=OK], Prob[Fi=partial|Wi=NotOK]:

Prob_partial = c(0.002, 0.001)

# Prob[Fi=NOmatch|Wi=OK], Prob[Fi=NOmatch|Wi=NotOK]:

Prob_NOmatch = 1 - Prob_match - Prob_partial


###### First Goal: Probability of being a user type I, given the numbers of matchings (m) and partial matchings (p).


# Prob[Fi=fi|U=u]
#
p.fi_u <- function(fi, u)
{
    unname(rbind(Prob_match, Prob_partial, Prob_NOmatch) %*% rbind(Prob_OK, Prob_NotOK))[fi,u]
}

# Prob[F=f|U=u]
#
p.f_u <- function(n, m, p, u)
{
    exp( log(p.fi_u(1, u))*m + log(p.fi_u(2, u))*p + log(p.fi_u(3, u))*(n-m-p) )
}

# Prob[F=f]
#
p.f <- function(n, m, p)
{
    p.f_u(n, m, p, 1)*Prob_user[1] + p.f_u(n, m, p, 2)*Prob_user[2] + p.f_u(n, m, p, 3)*Prob_user[3]
}

# Prob[U=u|F=f]
#
p.u_f <- function(u, n, m, p)
{
    p.f_u(n, m, p, u) * Prob_user[u] / p.f(n, m, p)
}

# Probability user type I for n=1,...,5:

for(n in 1:5) for(m in 0:n) for(p in 0:(n-m))
{
    cat("n =", n, "| m =", m, "| p =", p, "| Prob type I =", p.u_f(1, n, m, p), "\n")
}

##################################################################################################

# Second Goal: Probability all words OK given matchings/partial matchings.

p.f_wOK <- function(n, m, p)
{
    exp( log(Prob_match[1])*m + log(Prob_partial[1])*p + log(Prob_NOmatch[1])*(n-m-p) )
}

p.wOK <- function(n)
{
    sum(exp( log(Prob_OK)*n + log(Prob_user) ))
}

p.wOK_f <- function(n, m, p)
{
    p.f_wOK(n, m, p)*p.wOK(n)/p.f(n, m, p)
}

# Probability all words ok for n=1,...,5:

for(n in 1:5) for(m in 0:n) for(p in 0:(n-m))
{
    cat("n =", n, "| m =", m, "| p =", p, "| Prob all OK =", p.wOK_f(n, m, p), "\n")
}

5. Результаты

Это результаты для n = 1,..., 5 и все возможности для m и p. Например, если у вас есть 3 слова, одно совпадение, одно частичное совпадение и один не найден, вы можете быть 66,5% уверены, что это пользователь класса I. В той же ситуации вы можете приписать балл 42,8%, что все слова действительны.

Обратите внимание, что опция (a) не дает 100% баллов для всех совпадений, но вариант (b). Это ожидается, так как мы предположили, что в базе данных нет недопустимых слов, поэтому, если все они найдены, то все они действительны. OTOH, есть небольшой шанс, что пользователь в классе II или III может ввести все действительные слова, но этот шанс быстро уменьшается с ростом n.

(а)

n = 1 | m = 0 | p = 0 | Prob type I = 0.06612505 
n = 1 | m = 0 | p = 1 | Prob type I = 0.8107086 
n = 1 | m = 1 | p = 0 | Prob type I = 0.9648451 
n = 2 | m = 0 | p = 0 | Prob type I = 0.002062543 
n = 2 | m = 0 | p = 1 | Prob type I = 0.1186027 
n = 2 | m = 0 | p = 2 | Prob type I = 0.884213 
n = 2 | m = 1 | p = 0 | Prob type I = 0.597882 
n = 2 | m = 1 | p = 1 | Prob type I = 0.9733557 
n = 2 | m = 2 | p = 0 | Prob type I = 0.982106 
n = 3 | m = 0 | p = 0 | Prob type I = 5.901733e-05 
n = 3 | m = 0 | p = 1 | Prob type I = 0.003994149 
n = 3 | m = 0 | p = 2 | Prob type I = 0.200601 
n = 3 | m = 0 | p = 3 | Prob type I = 0.9293284 
n = 3 | m = 1 | p = 0 | Prob type I = 0.07393334 
n = 3 | m = 1 | p = 1 | Prob type I = 0.665019 
n = 3 | m = 1 | p = 2 | Prob type I = 0.9798274 
n = 3 | m = 2 | p = 0 | Prob type I = 0.7500993 
n = 3 | m = 2 | p = 1 | Prob type I = 0.9864524 
n = 3 | m = 3 | p = 0 | Prob type I = 0.990882 
n = 4 | m = 0 | p = 0 | Prob type I = 1.66568e-06 
n = 4 | m = 0 | p = 1 | Prob type I = 0.0001158324 
n = 4 | m = 0 | p = 2 | Prob type I = 0.007636577 
n = 4 | m = 0 | p = 3 | Prob type I = 0.3134207 
n = 4 | m = 0 | p = 4 | Prob type I = 0.9560934 
n = 4 | m = 1 | p = 0 | Prob type I = 0.004198015 
n = 4 | m = 1 | p = 1 | Prob type I = 0.09685249 
n = 4 | m = 1 | p = 2 | Prob type I = 0.7256616 
n = 4 | m = 1 | p = 3 | Prob type I = 0.9847408 
n = 4 | m = 2 | p = 0 | Prob type I = 0.1410053 
n = 4 | m = 2 | p = 1 | Prob type I = 0.7992839 
n = 4 | m = 2 | p = 2 | Prob type I = 0.9897541 
n = 4 | m = 3 | p = 0 | Prob type I = 0.855978 
n = 4 | m = 3 | p = 1 | Prob type I = 0.9931117 
n = 4 | m = 4 | p = 0 | Prob type I = 0.9953741 
n = 5 | m = 0 | p = 0 | Prob type I = 4.671933e-08 
n = 5 | m = 0 | p = 1 | Prob type I = 3.289577e-06 
n = 5 | m = 0 | p = 2 | Prob type I = 0.0002259559 
n = 5 | m = 0 | p = 3 | Prob type I = 0.01433312 
n = 5 | m = 0 | p = 4 | Prob type I = 0.4459982 
n = 5 | m = 0 | p = 5 | Prob type I = 0.9719289 
n = 5 | m = 1 | p = 0 | Prob type I = 0.0002158996 
n = 5 | m = 1 | p = 1 | Prob type I = 0.005694145 
n = 5 | m = 1 | p = 2 | Prob type I = 0.1254661 
n = 5 | m = 1 | p = 3 | Prob type I = 0.7787294 
n = 5 | m = 1 | p = 4 | Prob type I = 0.988466 
n = 5 | m = 2 | p = 0 | Prob type I = 0.00889696 
n = 5 | m = 2 | p = 1 | Prob type I = 0.1788336 
n = 5 | m = 2 | p = 2 | Prob type I = 0.8408416 
n = 5 | m = 2 | p = 3 | Prob type I = 0.9922575 
n = 5 | m = 3 | p = 0 | Prob type I = 0.2453087 
n = 5 | m = 3 | p = 1 | Prob type I = 0.8874493 
n = 5 | m = 3 | p = 2 | Prob type I = 0.994799 
n = 5 | m = 4 | p = 0 | Prob type I = 0.9216786 
n = 5 | m = 4 | p = 1 | Prob type I = 0.9965092 
n = 5 | m = 5 | p = 0 | Prob type I = 0.9976583 

(б)

n = 1 | m = 0 | p = 0 | Prob all OK = 0.04391523 
n = 1 | m = 0 | p = 1 | Prob all OK = 0.836025 
n = 1 | m = 1 | p = 0 | Prob all OK = 1 
n = 2 | m = 0 | p = 0 | Prob all OK = 0.0008622994 
n = 2 | m = 0 | p = 1 | Prob all OK = 0.07699368 
n = 2 | m = 0 | p = 2 | Prob all OK = 0.8912977 
n = 2 | m = 1 | p = 0 | Prob all OK = 0.3900892 
n = 2 | m = 1 | p = 1 | Prob all OK = 0.9861099 
n = 2 | m = 2 | p = 0 | Prob all OK = 1 
n = 3 | m = 0 | p = 0 | Prob all OK = 1.567032e-05 
n = 3 | m = 0 | p = 1 | Prob all OK = 0.001646751 
n = 3 | m = 0 | p = 2 | Prob all OK = 0.1284228 
n = 3 | m = 0 | p = 3 | Prob all OK = 0.923812 
n = 3 | m = 1 | p = 0 | Prob all OK = 0.03063598 
n = 3 | m = 1 | p = 1 | Prob all OK = 0.4278888 
n = 3 | m = 1 | p = 2 | Prob all OK = 0.9789305 
n = 3 | m = 2 | p = 0 | Prob all OK = 0.485069 
n = 3 | m = 2 | p = 1 | Prob all OK = 0.990527 
n = 3 | m = 3 | p = 0 | Prob all OK = 1 
n = 4 | m = 0 | p = 0 | Prob all OK = 2.821188e-07 
n = 4 | m = 0 | p = 1 | Prob all OK = 3.046322e-05 
n = 4 | m = 0 | p = 2 | Prob all OK = 0.003118531 
n = 4 | m = 0 | p = 3 | Prob all OK = 0.1987396 
n = 4 | m = 0 | p = 4 | Prob all OK = 0.9413746 
n = 4 | m = 1 | p = 0 | Prob all OK = 0.001109629 
n = 4 | m = 1 | p = 1 | Prob all OK = 0.03975118 
n = 4 | m = 1 | p = 2 | Prob all OK = 0.4624648 
n = 4 | m = 1 | p = 3 | Prob all OK = 0.9744778 
n = 4 | m = 2 | p = 0 | Prob all OK = 0.05816511 
n = 4 | m = 2 | p = 1 | Prob all OK = 0.5119571 
n = 4 | m = 2 | p = 2 | Prob all OK = 0.9843855 
n = 4 | m = 3 | p = 0 | Prob all OK = 0.5510398 
n = 4 | m = 3 | p = 1 | Prob all OK = 0.9927134 
n = 4 | m = 4 | p = 0 | Prob all OK = 1 
n = 5 | m = 0 | p = 0 | Prob all OK = 5.05881e-09 
n = 5 | m = 0 | p = 1 | Prob all OK = 5.530918e-07 
n = 5 | m = 0 | p = 2 | Prob all OK = 5.899106e-05 
n = 5 | m = 0 | p = 3 | Prob all OK = 0.005810434 
n = 5 | m = 0 | p = 4 | Prob all OK = 0.2807414 
n = 5 | m = 0 | p = 5 | Prob all OK = 0.9499773 
n = 5 | m = 1 | p = 0 | Prob all OK = 3.648353e-05 
n = 5 | m = 1 | p = 1 | Prob all OK = 0.001494098 
n = 5 | m = 1 | p = 2 | Prob all OK = 0.051119 
n = 5 | m = 1 | p = 3 | Prob all OK = 0.4926606 
n = 5 | m = 1 | p = 4 | Prob all OK = 0.9710204 
n = 5 | m = 2 | p = 0 | Prob all OK = 0.002346281 
n = 5 | m = 2 | p = 1 | Prob all OK = 0.07323064 
n = 5 | m = 2 | p = 2 | Prob all OK = 0.5346423 
n = 5 | m = 2 | p = 3 | Prob all OK = 0.9796679 
n = 5 | m = 3 | p = 0 | Prob all OK = 0.1009589 
n = 5 | m = 3 | p = 1 | Prob all OK = 0.5671273 
n = 5 | m = 3 | p = 2 | Prob all OK = 0.9871377 
n = 5 | m = 4 | p = 0 | Prob all OK = 0.5919764 
n = 5 | m = 4 | p = 1 | Prob all OK = 0.9938288 
n = 5 | m = 5 | p = 0 | Prob all OK = 1 

Ответ 4

Если "средний" не является решением, потому что в базе данных не хватает слов, я бы сказал: расширьте базу данных:)

Другая идея может заключаться в том, чтобы "взвешивать" результаты, чтобы получить свет скорректированного среднего значения, например:

100% = 1.00x weight
90%  = 0.95x weight
80%  = 0.90x weight
...
0%   = 0.50x weight

поэтому для вашего примера вы бы:

(100*1 + 90*0.95 + 0*0.5) / (100*1 + 100*0.95 + 100*0.5) = 0.75714285714
 => 75.7%
regular average would be 63.3%

Ответ 5

Так как порядок слов не важен в вашем описании, независимая переменная - это доля действительных слов. Если фракция является совершенной 1, т.е. Все слова считаются идеальными совпадениями с БД, тогда вы абсолютно уверены, что все это будет правильным. Если он равен нулю, т.е. Все слова являются прекрасными промахами в БД, тогда вы совершенно уверены, что все это неверно. Если у вас есть .5, то это должен быть маловероятный смешанный результат, потому что ни один из двух других невозможен.

Вы говорите, что смешанный исход маловероятен, в то время как две крайности являются moreso. Вы после вероятности достоверного результата.

Пусть доля действительных слов (сумма "мерцаний" совпадений /# слов) равна f, и, следовательно, искомой правдоподобия вседействующего результата будет L (f). По обсуждению до сих пор мы знаем, что L (1) = 1 и L (f) = 0 для 0 <= f <= 1/2.

Чтобы почтить вашу информацию о том, что смешанный результат менее вероятен, чем все действительный (и все недопустимый) результат, форма L должна возрастать монотонно и быстро от 1/2 к 1 и достигать 1 при f = 1,

Поскольку это эвристика, мы можем выбрать любую разумную функцию с этим символом. Если мы умны, у него будет параметр для контроля крутизны шага и, возможно, другого для его местоположения. Это позволяет нам настроить, что "менее вероятно" означает для среднего случая.

Одна из таких функций такова, что для 1/2 <= f <= 1:

L(f) = 5 + f * (-24 + (36 - 16 * f) * f) + (-4 + f * (16 + f * (-20 + 8 * f))) * s

и ноль для 0 <= f < 1/2. Хотя это волосатый взгляд, это самый простой полином, который пересекает (1/2,0) и (1,1) с наклоном 0 при f = 1 и наклоном s при f = 0.

Вы можете установить 0 <= s <= 3, чтобы изменить форму шага. Вот выстрел с s = 3, который, вероятно, вы хотите: Screen shot of function plot

Если вы установите s > 3, он стреляет выше 1, прежде чем оседать, а не то, что мы хотим.

Конечно, существует бесконечно много других возможностей. Если этот не работает, комментируйте, и мы будем искать другого.

Ответ 6

усреднение - это, конечно, мусор. Если вероятности отдельных слов были точными, вероятность того, что все слова верны, - это просто продукт, а не средний. Если у вас есть оценка неопределенностей в ваших индивидуальных вероятностях, вы можете выработать свой маргинальный продукт по всем индивидуальным вероятностям.