Модель Latent semantic analysis (LSA)
Модель скрытого семантического анализа (LSA) обнаруживает отношения между документами и словами, которые они содержат. Модель LSA является инструментом сокращения размерности, полезным для выполнения низко-размерных статистических моделей на высоко-размерных подсчетах слов. Если модель была подходящим использованием мешка n модели граммов, то программное обеспечение обрабатывает N-граммы как отдельные слова.
Создайте модель LSA с помощью fitlsa
функция.
NumComponents
— Количество компонентовКоличество компонентов, заданных как неотрицательное целое число. Количество компонентов является размерностью итоговых векторов. Изменение значения NumComponents
изменяет длину итоговых векторов, не влияя на начальные значения. Можно только установить NumComponents
быть меньше чем или равным количеству компонентов раньше подбирало модель LSA.
Пример: 100
FeatureStrengthExponent
— Экспонента, масштабирующая сильные места компонента функцииЭкспонента, масштабирующая сильные места компонента функции для DocumentScores
и WordScores
свойства и transform
функция, заданная как неотрицательный скаляр. Модель LSA масштабирует свойства их сингулярными значениями (сильные места функции) с экспонентой FeatureStrengthExponent/2
.
Пример: 2.5
ComponentWeights
— Веса компонентаВеса компонента, заданные как числовой вектор. Веса компонента модели LSA являются сингулярными значениями, в квадрате. ComponentWeights
1 NumComponents
вектор, где j th запись соответствует весу j компонента. Компоненты упорядочены путем уменьшения весов. Можно использовать веса, чтобы оценить важность компонентов.
DocumentScores
— Выиграйте векторы на входной документВыиграйте векторы на входной документ, заданный как матрица. Множество документа модели LSA является векторами счета в более низком мерном пространстве каждого документа, используемого, чтобы подбирать модель LSA. DocumentScores
D-by-NumComponents
матрица, где D является количеством документов, раньше подбирала модель LSA. (i,j) th запись DocumentScores
соответствует счету j компонента в документе i.
WordScores
— Баллы Word на компонентБаллы Word на компонент, заданный как матрица. Множество слова модели LSA является множеством каждого слова в каждом компоненте модели LSA. WordScores
V-by-NumComponents
матрица, где V является количеством слов в Vocabulary
. (v,j) th запись WordScores
соответствует счету слова v в j компонента.
Vocabulary
— Уникальные слова в моделиУникальные слова в модели, заданной как вектор строки.
Типы данных: string
transform | Преобразуйте документы в более низкое мерное пространство |
Подбирайте модель Latent Semantic Analysis к набору документов.
Загрузите данные в качестве примера. Файл 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.