আমি এমন একটি প্রকল্পে কাজ করছি যেখানে আমি ধারাবাহিক ওপেন-এন্ড প্রবন্ধের বিষয়বস্তু সম্পর্কে কিছু তথ্য বের করতে চাই। এই বিশেষ প্রকল্পে, 148 জন একটি বৃহত্তর পরীক্ষার অংশ হিসাবে একটি অনুমান ছাত্র সংগঠন সম্পর্কে প্রবন্ধ লিখেছিলেন। যদিও আমার ক্ষেত্রে (সামাজিক মনোবিজ্ঞান), এই তথ্যগুলির বিশ্লেষণের সাধারণ উপায়টি হ'ল প্রবন্ধগুলি কোড করা, আমি এই পরিমাণগতভাবে করতে চাই, যেহেতু হাতের কোডিং উভয়ই শ্রম-নিবিড় এবং আমার পক্ষে কিছুটা বিষয়ভিত্তিক স্বাদ।
মুক্ত প্রতিক্রিয়ার ডেটা পরিমাণগতভাবে বিশ্লেষণ করার উপায়গুলি সম্পর্কে আমার তদন্তকালে আমি টপিক মডেলিং (বা ল্যাটেন্ট ডিরিচলেট বরাদ্দ, বা এলডিএ) নামক একটি পদ্ধতির উপর ঝাঁপিয়ে পড়েছিলাম । টপিক মডেলিং আপনার ডেটা (একটি শব্দ-ডকুমেন্ট ম্যাট্রিক্স) এর ব্যাগ অফ-শব্দের উপস্থাপনা নেয় এবং ডেটাটির সুপ্ত বিষয়গুলি বের করতে সহ-উপস্থিতি শব্দটি সম্পর্কিত তথ্য ব্যবহার করে। এই পদ্ধতির আমার অ্যাপ্লিকেশন জন্য নিখুঁত বলে মনে হচ্ছে।
দুর্ভাগ্যক্রমে, যখন আমি আমার ডেটাতে টপিক মডেলিং প্রয়োগ করেছি তখন আমি দুটি বিষয় আবিষ্কার করেছি:
- টপিক মডেলিংয়ের মাধ্যমে অনাবৃত বিষয়গুলি মাঝে মাঝে ব্যাখ্যা করা শক্ত
- যখন আমি আমার বিষয়গুলির মডেলগুলি অন্যরকম এলোমেলো বীজের সাথে আবার চালিত করি তখন বিষয়গুলি নাটকীয়ভাবে পরিবর্তিত হবে বলে মনে হয়
2 সংখ্যাটি বিশেষত আমাকে উদ্বেগিত করে। অতএব, আমার দুটি সম্পর্কিত প্রশ্ন রয়েছে:
- ব্যাখ্যা এবং স্থায়িত্বের জন্য আমার মডেল ফিট পদ্ধতিটি অনুকূল করতে আমি এলডিএ পদ্ধতিতে কিছু করতে পারি? ব্যক্তিগতভাবে, আমি সর্বনিম্ন বিভ্রান্তি এবং / অথবা সেরা মডেল ফিটের সাথে মডেলটি সন্ধান করার বিষয়ে তেমন যত্ন নিই না - এই গবেষণায় অংশগ্রহণকারীরা তাদের প্রবন্ধগুলিতে কী লিখেছেন তা বোঝার এবং বৈশিষ্ট্যযুক্ত করার জন্য আমি মূলত এই পদ্ধতিটি ব্যবহার করতে চাই। যাইহোক, আমি অবশ্যই আমার ফলাফলগুলি এলোমেলো বীজের একটি নিদর্শন হিসাবে না চাই!
- উপরোক্ত প্রশ্নের সাথে সম্পর্কিত, আপনার এলডিএ করার জন্য কতটা ডেটা দরকার তার কোনও মানদণ্ড রয়েছে? আমি দেখেছি যে বেশিরভাগ কাগজপত্র এই পদ্ধতিটি ব্যবহার করেছে তা বৃহত্তর কর্পোরাকে বিশ্লেষণ করে (উদাহরণস্বরূপ, বিগত 20 বছর থেকে সমস্ত বিজ্ঞানের কাগজপত্রের সংরক্ষণাগার), তবে, যেহেতু আমি পরীক্ষামূলক ডেটা ব্যবহার করছি, তাই আমার নথিগুলির করপাসটি আরও ছোট।
যে কেউ তার হাত নোংরা করতে চায় তার জন্য আমি এখানে রচনা ডেটা পোস্ট করেছি এবং আমি নীচে যে আর কোডটি ব্যবহার করছি তা পেস্ট করেছি।
require(tm)
require(topicmodels)
# Create a corpus from the essay
c <- Corpus(DataframeSource(essays))
inspect(c)
# Remove punctuation and put the words in lower case
c <- tm_map(c, removePunctuation)
c <- tm_map(c, tolower)
# Create a DocumentTermMatrix. The stopwords are the LIWC function word categories
# I have a copy of the LIWC dictionary, but if you want to do a similar analysis,
# use the default stop words in tm
dtm <- DocumentTermMatrix(c, control = list(stopwords =
c(dict$funct, dict$pronoun, dict$ppron, dict$i, dict$we, dict$you, dict$shehe,
dict$they, dict$inpers, dict$article, dict$aux)))
# Term frequency inverse-document frequency to select the desired words
term_tfidf <- tapply(dtm$v/rowSums(as.matrix(dtm))[dtm$i], dtm$j, mean) * log2(nDocs(dtm)/colSums(as.matrix(dtm)))
summary(term_tfidf)
dtm <- dtm[, term_tfidf >= 0.04]
lda <- LDA(dtm, k = 5, seed = 532)
perplexity(lda)
(terms <- terms(lda, 10))
(topics <- topics(lda))
সম্পাদনা:
nstart
মন্তব্যে ফ্লাউন্ডারারের পরামর্শ অনুসারে আমি সংশোধন করার চেষ্টা করেছি । দুর্ভাগ্যক্রমে, নীচে প্রদর্শিত হিসাবে, এমনকি nstart
এলোমেলো বীজ থেকে এলোমেলো বীজের ক্ষেত্রে নাটকীয়ভাবে পরিবর্তিত হওয়া বিষয়গুলিতে 1000 টি ফলাফলের সেট করা। কেবল আবার জোর দেওয়ার জন্য, নীচের দুটি মডেলের অনুমানের মধ্যে আমি কেবলমাত্র পরিবর্তন করছি মডেল অনুমান শুরু করতে ব্যবহৃত এলোমেলো বীজ এবং তবুও বিষয়গুলি এই দুটি রানের সাথে সামঞ্জস্যপূর্ণ বলে মনে হয় না।
lda <- LDA(dtm, k = 5, seed = 535, control = list(nstart = 1000))
(terms <- terms(lda, 10))
Topic 1 Topic 2 Topic 3 Topic 4 Topic 5
[1,] "international" "ethnicity" "free" "credit" "kind"
[2,] "communicate" "true" "team" "mandatory" "bridge"
[3,] "gain" "asians" "cooperate" "music" "close"
[4,] "use" "hand" "order" "seen" "deal"
[5,] "big" "hold" "play" "barrier" "designed"
[6,] "communication" "effective" "big" "stereotypes" "effort"
[7,] "america" "emphasis" "beginning" "asians" "implemented"
[8,] "chinese" "halls" "china" "fantastic" "websites"
[9,] "ethnicity" "minorities" "difference" "focusing" "planned"
[10,] "networks" "population" "easier" "force" "body"
lda <- LDA(dtm, k = 5, seed = 536, control = list(nstart = 1000))
(terms <- terms(lda, 10))
Topic 1 Topic 2 Topic 3 Topic 4 Topic 5
[1,] "kind" "international" "issue" "willing" "play"
[2,] "easier" "ethnicity" "close" "use" "trying"
[3,] "gain" "communication" "currently" "hand" "unity"
[4,] "websites" "communicate" "implemented" "networks" "decision"
[5,] "credit" "bridge" "particularly" "stereotypes" "gap"
[6,] "effort" "america" "credit" "communicate" "normally"
[7,] "barriers" "connection" "fulfill" "came" "asians"
[8,] "effects" "kind" "grew" "asians" "created"
[9,] "established" "order" "perspectives" "big" "effective"
[10,] "strangers" "skills" "big" "budget" "prejudice"
nstart
কোর্স ওয়েবসাইটটি সামঞ্জস্য করতে এবং দেখার চেষ্টা করব either যেগুলির মধ্যে কোনওটি কার্যকর উপার্জন করে কিনা তা দেখার জন্য। (বিটিডাব্লু, আপনি যদি কোনও উত্তরে আপনার মন্তব্য সন্নিবেশ করেন তবে আমি এটিই ভোটাভুটি করব anything আমি কোনও কিছু গ্রহণ করার আগে অন্য কারও কাছে পরামর্শ আছে কিনা তা দেখতে চাই তবে আমি মনে করি আপনার মন্তব্যগুলি উত্তর হিসাবে গণনা করার পক্ষে যথেষ্ট)।
LDA
ফাংশনে নিয়ন্ত্রণ পরামিতিগুলি সামঞ্জস্য করতে চেষ্টা করতে পারেনtopicmodels
। বিশেষত, আপনি আরওnstart
বড় করার চেষ্টা করতে পারেন । এটি আপনার ফলাফলগুলিকে আরও স্থিতিশীল করার গ্যারান্টিযুক্ত , কারণ এলডিএ ফাংশনটি বিভিন্ন এলোমেলো বীজের সাথে বারবার চলবে এবং তারপরে সেরা ফলাফলটি ফিরিয়ে দেবে। দুর্ভাগ্যক্রমে,nstart
বলার অপেক্ষা রাখে যে 1000 অ্যালগরিদমকে আরও 1000 গুণ বেশি কাজ করবে (চালিয়ে যাবে)