Словарик
От: Apapa Россия  
Дата: 19.02.03 11:24
Оценка:
Есть идея написать программку, которая бы мучила меня английскими словами, например, раз в минуту. Легкая ненавязчивость, стабильная периодичность... ну и все в этом духе.

Помимо, возможно, транскрипции и перевода каждое слово должно содержать дополнительную информацию, например, количество возможных переводов слова, сколько раз меня это слово спрашивали, сколько раз (и какую часть из всех возможных) правильных переводов я дал и т.п.

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

P.S. Задачка не на сложность, а на фантазию, на поиск наиболее справедливого варианта. У меня есть вариант, но боюсь, что он не лучший...


Здесь могла бы быть Ваша реклама!
Re: Словарик
От: Pushkin Россия www.linkbit.com
Дата: 19.02.03 11:37
Оценка: 16 (1)
Здравствуйте, Apapa, Вы писали:

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


Для каждого слова хранится величина Ki.
В начале для всех слов Ki=1.
С каждым правильным ответом Ki уменьшается вдвое (ну или в x раз)
С каждым неправильным ответом наоборот увеличивается вдвое (в y раз)
При превышении 1 сваливается в 1 (Ki=min(Ki,1))
Очередной вопрос падает на это слово с вероятностью Ki/SUM[Kj]

Плюсы.
Известные слова тонут, но не убиваются совсем.
Слово, на которое несколько раз ответил неправильно, объявляется неизвестным.
Два параметра для настройки.

PS
Потом дашь поюзать?
Re[2]: Словарик
От: Apapa Россия  
Дата: 19.02.03 11:46
Оценка:
Привет, Pushkin!

P>Для каждого слова хранится величина Ki.

P>В начале для всех слов Ki=1.
P>С каждым правильным ответом Ki уменьшается вдвое (ну или в x раз)
P>С каждым неправильным ответом наоборот увеличивается вдвое (в y раз)
P>При превышении 1 сваливается в 1 (Ki=min(Ki,1))
P>Очередной вопрос падает на это слово с вероятностью Ki/SUM[Kj]
Интересно!

P>Плюсы.

P>Известные слова тонут, но не убиваются совсем.
Это очень важно! В моем варианте тоже это учитывается...

P>Слово, на которое несколько раз ответил неправильно, объявляется неизвестным.

А это как: Ki = 0? И зачем?

P>Два параметра для настройки.

Что из Ki, x, y имеется в виду?

P>PS

P>Потом дашь поюзать?
Обязательно. Лишь бы работало...


Здесь могла бы быть Ваша реклама!
Re[2]: Словарик
От: Apapa Россия  
Дата: 19.02.03 12:12
Оценка:
Привет, Pushkin!

P>Для каждого слова хранится величина Ki.

P>В начале для всех слов Ki=1.
P>С каждым правильным ответом Ki уменьшается вдвое (ну или в x раз)
P>С каждым неправильным ответом наоборот увеличивается вдвое (в y раз)
P>При превышении 1 сваливается в 1 (Ki=min(Ki,1))
P>Очередной вопрос падает на это слово с вероятностью Ki/SUM[Kj]
P>Слово, на которое несколько раз ответил неправильно, объявляется неизвестным.

Однако есть некоторые минусы:
1. Если слово имеет несколько значений, как тогда их распределить? Считать их отдельно. Но тогда при ответе сразу, скажем, трех вариантов слово "уменьшается" в восемь раз.
2. Если мы не ответили на слово 8 раз, а потом ответили почему-то 2 раза (например, только что встретили его где-нибудь еще), то его вес стал 0.25. Если же мы на другое слово ответили 2 раза из восьми, о потом два раза не ответили (в итоге те же 2 раза из десяти), то вес этого слова равен 1. Делать же Ki больше 1 не разумно (одно слово может сильно потопить остальные).


Здесь могла бы быть Ваша реклама!
Re: Словарик
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 19.02.03 12:41
Оценка: 17 (2)
Здравствуйте, Apapa, Вы писали:

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

Далее, чем чаще слово встречалось в текстах, тем чаще оно спрашивалось.
Re[3]: Словарик
От: Pushkin Россия www.linkbit.com
Дата: 19.02.03 14:44
Оценка:
Здравствуйте, Apapa, Вы писали:

P>Слово, на которое несколько раз ответил неправильно, объявляется неизвестным.

A>А это как: Ki = 0? И зачем?

Ki=0 — это наоборот, самое известное слово.
Неизвестное — Ki=1 — и получается оно само собой после нескольких неправильных ответов.

P>Два параметра для настройки.

A>Что из Ki, x, y имеется в виду?

Прараметры — x и y.
Ki — переменные программы (сбрасываемые на диск при выходе)

A>Однако есть некоторые минусы:

A>1. Если слово имеет несколько значений, как тогда их распределить? Считать их отдельно. Но тогда при ответе сразу, скажем, трех вариантов слово "уменьшается" в восемь раз.

Все значения надо относить к одному слову.
И требовать от юзера ввести их все за раз.
За каждое неуказанное значение увеличивать частоту (Ki) вдвое.
За каждое верно указанное — уменьшать.
Слово с оравой значений, которых знаешь половину, останется на том же месте в топе.
Если значения заведомо идиотские — не включай их в список слова.

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

A>2. Если мы не ответили на слово 8 раз, а потом ответили почему-то 2 раза (например, только что встретили его где-нибудь еще), то его вес стал 0.25. Если же мы на другое слово ответили 2 раза из восьми, о потом два раза не ответили (в итоге те же 2 раза из десяти), то вес этого слова равен 1. Делать же Ki больше 1 не разумно (одно слово может сильно потопить остальные).


Играй параметрами x,y. 2 — это от балды.
Имхо, разумней за знание уменьшать частоту несильно (x=1.5),
а за незнание наказывать жёстче (y=2)
Re[3]: Словарик
От: plague Россия  
Дата: 19.02.03 16:41
Оценка: 16 (1)
Здравствуйте, Apapa, Вы писали:

A>Однако есть некоторые минусы:

A>1. Если слово имеет несколько значений, как тогда их распределить? Считать их отдельно. Но тогда при ответе сразу, скажем, трех вариантов слово "уменьшается" в восемь раз.
A>2. Если мы не ответили на слово 8 раз, а потом ответили почему-то 2 раза (например, только что встретили его где-нибудь еще), то его вес стал 0.25. Если же мы на другое слово ответили 2 раза из восьми, о потом два раза не ответили (в итоге те же 2 раза из десяти), то вес этого слова равен 1. Делать же Ki больше 1 не разумно (одно слово может сильно потопить остальные).

думаю лучше было бы спрашивать в виде "тестов", т.е. вопрос + N ответов...
(в которых вибирать один из нескольких или несколько из нескольких вариантов)

в случае успеха коэффициент качества знания слова увеличивается,
в противном случае коэффициенты завпрашиваемого слова и слова соответствующему выбору уменьшаются

т.е. решаем минус №1
а №2 я совсем минусом не считаю, нужно исправлять пробелы...

и даже добывлю плюс, при выборе ответа интуитивно запоминаешь выбранный вариант (при том — визуально, в не зависимости говорится правильный ответ или нет), вслетствие чего в следующий раз можно даже не осознавать значение слова, но помнить его "визуально"... т.е. требуемый результат...
Re[3]: Добавочка
От: Pushkin Россия www.linkbit.com
Дата: 20.02.03 11:44
Оценка:
Здравствуйте, Apapa, Вы писали:

A>Однако есть некоторые минусы:

A>1. Если слово имеет несколько значений, как тогда их распределить? Считать их отдельно. Но тогда при ответе сразу, скажем, трех вариантов слово "уменьшается" в восемь раз.

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

A>2 Делать же Ki больше 1 не разумно (одно слово может сильно потопить остальные).


Ты знаешь, по зрелому размышлению, я думаю, что не надо предела устанавливать.
Тебя спрашивают — ты не отвечаешь, ещё спрашивают — опять не отвечаешь.
Когда-то же начнёшь отвечать. И слово утонет. Полная саморегуляция!
И алгоритм становится совсем простой. Не мог держаться, написал

int GetRandomWord(bool last_answer_was_correct)
{
  static double k[NWORDS], ksum;
  static int not_first_entry=0, last_word;

  if(not_first_entry)
  {
    if(last_answer_was_correct)
    {
      k[last_word]/=2;
      ksum-=k[last_word];
    }
    else
    {
      ksum+=k[last_word];
      k[last_word]*=2;   
    }  
  }
  else
  {
    for(int i=0;i<NWORDS;i++)
      k[i]=1;
    ksum=NWORDS;
    not_first_entry=1;
  }
  
  double sum = ksum*rand();
  for(int i=0;i<NWORDS;i++)
  {
    sum-=k[i]*RAND_MAX;
    if(sum<0)
      break;
  }

  return last_word=i;
}
Re[2]: Словарик
От: Sentara  
Дата: 20.02.03 15:12
Оценка: 12 (2)
Здравствуйте, Pushkin, Вы писали:

P>Для каждого слова хранится величина Ki.

...
P>Очередной вопрос падает на это слово с вероятностью Ki/SUM[Kj]

Существует серия программ, основанных на сходном принципе. См. сайт: www.supermemo.com.

Там же можно найти теорию и конкретные алгоритмы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.