Модель латентного семантического анализа (LSA)
Модель латентного семантического анализа (LSA) обнаруживает отношения между документами и словами, которые они содержат. Модель LSA является инструментом уменьшения размерности, полезным для выполнения маломерных статистических моделей на высокомерных отсчетах слов. Если модель подгонялась с помощью модели bag-of-n-gams, то программа рассматривает n-gams как отдельные слова.
Создайте модель LSA с помощью fitlsa функция.
NumComponents - Количество компонентовКоличество компонентов, заданное в виде неотрицательного целого числа. Количество компонентов является размерностью результирующих векторов. Изменение значения NumComponents изменяет длину получившихся векторов, не влияя на начальные значения. Можно задать только NumComponents быть меньше или равным количеству компонентов, используемых для соответствия модели LSA.
Пример: 100
FeatureStrengthExponent - Сильные стороны компонента экспонентного масштабированияСильные стороны компонента функции экспоненты для DocumentScores и WordScores свойства, и transform функция, заданная как неотрицательный скаляр. Модель LSA масштабирует свойства по их сингулярным значениям (сильные стороны функций) с показателем FeatureStrengthExponent/2.
Пример: 2.5
ComponentWeights - Веса компонентовВеса компонентов, заданные как числовой вектор. Веса компонентов модели LSA являются сингулярными значениями в квадрате. ComponentWeights является 1-байт- NumComponents вектор, где j-я запись соответствует весу j компонента. Компоненты упорядочиваются путем уменьшения веса. Можно использовать веса для оценки важности компонентов.
DocumentScores - Рассчитать векторы по входному документуБалльные векторы на входной документ, заданные как матрица. Счета документа модели LSA являются векторами счета в более низком размерном пространстве каждого документа, используемого для соответствия модели LSA. DocumentScores является D -by- NumComponents матрица, в которой D количество документов, используемых для соответствия модели LSA. (i,j)-я запись DocumentScores соответствует счета компонента, j в i документа.
WordScores - счета слов по компонентамСчета слов по компоненту, заданные как матрица. Слово счетов модели LSA является счетами каждого слова в каждом компоненте модели LSA. WordScores является V -by- NumComponents матрица, где V - количество слов в Vocabulary. (v,j)-я запись WordScores соответствует счету слов, v в компонентных j.
Vocabulary - Уникальные слова в моделиУникальные слова в модели, заданные как строковый вектор.
Типы данных: string
transform | Преобразуйте документы в низкомерное пространство |
Подбор модели латентного семантического анализа к набору документов.
Загрузите данные примера. Файл sonnetsPreprocessed.txt содержит предварительно обработанные версии сонетов Шекспира. Файл содержит по одному сонету на линию со словами, разделенными пространством. Извлеките текст из sonnetsPreprocessed.txtразделите текст на документы в символах новой строки, а затем пометьте его токеном.
filename = "sonnetsPreprocessed.txt";
str = extractFileText(filename);
textData = split(str,newline);
documents = tokenizedDocument(textData);Создайте модель мешка слов с помощью bagOfWords.
bag = bagOfWords(documents)
bag =
bagOfWords with properties:
Counts: [154x3092 double]
Vocabulary: [1x3092 string]
NumWords: 3092
NumDocuments: 154
Подгонка модели LSA с 20 компонентами.
numComponents = 20; mdl = fitlsa(bag,numComponents)
mdl =
lsaModel with properties:
NumComponents: 20
ComponentWeights: [1x20 double]
DocumentScores: [154x20 double]
WordScores: [3092x20 double]
Vocabulary: [1x3092 string]
FeatureStrengthExponent: 2
Преобразуйте новые документы в нижнее размерное пространство с помощью модели LSA.
newDocuments = tokenizedDocument([
"what's in a name? a rose by any other name would smell as sweet."
"if music be the food of love, play on."]);
dscores = transform(mdl,newDocuments)dscores = 2×20
0.1338 0.1623 0.1680 -0.0541 -0.2464 0.0134 0.2604 -0.0205 -0.1127 0.0627 0.3311 -0.2327 0.1689 -0.2695 0.0228 0.1241 0.1198 0.2535 -0.0607 0.0305
0.2547 0.5576 -0.0095 0.5660 -0.0643 0.1236 -0.0082 0.0522 0.0690 -0.0330 0.0385 0.0803 -0.0373 0.0384 -0.0005 0.1943 0.0207 0.0278 0.0001 -0.0469
Создайте модель мешка слов из некоторых текстовых данных.
str = [
"I enjoy ham, eggs and bacon for breakfast."
"I sometimes skip breakfast."
"I eat eggs and ham for dinner."
];
documents = tokenizedDocument(str);
bag = bagOfWords(documents);Подгонка модели LSA с двумя компонентами. Установите показатель прочности функции равным 0,5.
numComponents = 2; exponent = 0.5; mdl = fitlsa(bag,numComponents, ... 'FeatureStrengthExponent',exponent)
mdl =
lsaModel with properties:
NumComponents: 2
ComponentWeights: [16.2268 4.0000]
DocumentScores: [3x2 double]
WordScores: [14x2 double]
Vocabulary: [1x14 string]
FeatureStrengthExponent: 0.5000
Вычислите расстояние косинуса между векторами оценки документов, используя pdist. Просмотрите расстояния в матрице D использование squareform. D(i,j) обозначает расстояние между документом i и j.
dscores = mdl.DocumentScores;
distances = pdist(dscores,'cosine');
D = squareform(distances)D = 3×3
0 0.6244 0.1489
0.6244 0 1.1670
0.1489 1.1670 0
Визуализируйте сходство между документами путем построения векторов счета документа на компасном графике.
figure compass(dscores(1,1),dscores(1,2),'red') hold on compass(dscores(2,1),dscores(2,2),'green') compass(dscores(3,1),dscores(3,2),'blue') hold off title("Document Scores") legend(["Document 1" "Document 2" "Document 3"],'Location','bestoutside')

bagOfWords | fitlsa | ldaModel | lsaModel | transform
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.