что вы можете сделать, это использовать самоорганизующуюся карту (SOM) с топологией фиксированной длины, скажем, N-битными словами, например, например, если N = 8, то каждая ячейка в SOM имеет ровно 8 соседей (те, у которых был перевернут один бит). Теперь, если у вас есть K [словарь] слов, вы можете закодировать каждое [словарь] слово как вектор действительных чисел в диапазоне от 0 до 1, так что у i-го слова i-й элемент имеет значение 1, а у других 0. «расстояние» между двумя произвольными векторами a1 ... aK и b1 ... bK путем суммирования по
i,j : ai * bj * distance(ai, bj)
, который дает метрику расстояния для запуска алгоритма SOM. Когда SOM стабилизируется, слова [словарь] рядом друг с другом в вашей метрике находятся рядом друг с другом в топологии карты, из которой вы тривиально получаете кодировку в виде [двоичных] слов.
Обратите внимание, что на карте должно быть больше ячеек, чем слов, т. Е. 2 ** N> K.
Этот ответ, конечно, предполагает наличие самоорганизующихся карт. Увидеть
http://en.wikipedia.org/wiki/Self-organizing_map