Social Dynamics of Terabithia

In the land of Terabithia, king Jesse and princess May Belle have taken over the duty to rule the kingdom. The people of the kingdom are divided into five tribes at the time of their inauguration. These are liberal people, willing to accept and share new ideas and fashion available in each tribe. Jesse has appointed Abul (the court mathematician) to figure out how and at what rate his newly introduced fashion of wearing a Lungi will spread throughout his kingdom. He has also decided to divide his country into different districts based on different styles of wearing lungi.

Now, there are several factors for Abul to consider here. Some of the tribes have accepted Lungi as their choice of official dress code. However, they have different styles of wearing those. Tribe 1 likes wearing it with no shirts on, tribe 2 refused to accept it as their fashion, tribe 3 wears lungi with a kurta, tribe 4 prefers this style


and so on. The fashion designers in each tribe have made appealing designs to impress and encourage people from other tribes to accept their fashion. Abul needs to figure out and forecast the possibility of each tribe’s fashion surviving and/or flourishing over the whole kingdom.

Problem Statement

In sociology, economics, business planning etc, researchers and analysts are always concerned about how competing cultures, languages, fashion etc survive over a period of time. Some cultural trends are short lived, some defeat the existing trends and completely take over. It is impossible to predict what individuals think about each trend, but it is in our reach to predict what the mass trend will be once a steady state is reached.

Individuals have different philosophies. In general we update our idea of fashion and culture based on movies, TV, books, what others around us do etc. Some of us are trend starters. Others follow them. Many times it is not one person, it is a group of people following a trend that motivates others to follow. In the formal terminology of social science and social dynamics, there are three stages of a cultural trend change before it reaches a steady state.

  1. Emergence: A new cultural center emerges in a population. Someone or a group of people start using a new colloquial word, begin wearing a new kind of jeans or may be start listening/propagating a new genre of metal songs to others.
  2. Broadcast: This new trend is “shown off” to others occasionally. The trend starters use their newly coined colloquial word too often in public, wear the newly designed clothes in parties or release albums and organize concerts to promote the new genre of metal with some frequency.
  3. Following and Competition: Others decide whether they will accept or reject the new trend. If someone decides to accept, occasionally he/she also becomes one of the broadcasters. If there are several competing trends available, then a decision is made based on factors like the current number of people following the trend and how long this trend has been followed or simply personal taste.

Every trend usually dies after some time. This can be months, years or even decades. Our general tendency is to accept the newest trend.

In the field of Social Dynamics, agent based modeling has been used by many mathematicians to study the behavior of such chaotic systems. It is usually hard to find closed form solutions of any mathematical model describing such a complex process, so discrete time Monte Carlo simulations or rule based cellular automata systems have been used to predict mass behavior in a society.

To help Abul, we modify and suggest some improvements to a model proposed in this paper and add some more functionality to study the culture of Terabithian people.

Monte Carlo Model

The Monte Carlo simulation is performed on a lattice of size L \times L, containing L^{2} agents who interact with their neighbors. A fashion is defined as I(s,a), where s is the cultural center and broadcaster site, and a is the age of the fashion.

The model assumes that newly arrived fashions are likely to be accepted more. A fashion I(s_{i},a_{i}) for a particular agent i can change its preference to another fashion from site s_{j} if a_{j}<a_{i}. Keeping this in mind, the proposed algorithm to take a timestep from t to t + 1 over the whole lattice is

  1. Emergence step: With a very small probability p_{new}, a new cultural center emerges. I_{i}(t)=I(i,0).
  2. Broadcast step: With a probability p_{repeat}, the cultural centers restrengthen themselves to affect their neighbors. I(i,a_{i,t})=I(i,0).
  3. Spread step: Each site i randomly chooses one of its nearest neighbors j (with equal probability) by whom it will be affected. If a_{j}<a_{i}, then the current fashion at i is changed to the fashion followed by j. I(s_{i},a_{i})=I(s_{j},a_{j}). Otherwise nothing changes for i.
  4. All ages in each lattice site is increased by 1.


  1. The original model proposes choosing a site randomly as an emerging cultural center. This limits Abul to concentrate on one tribe only. In other words, the model does not consider competition between several *existing* fashions. We propose to change this scheme and assume each tribe acts as their own ambassador. Thus we assign a cultural center to each tribe as an initial condition and all of them are broadcasters of their own fashion.
  2. The paper considers geographic impacts such as closed boundary at the borders of a country. We extend this by considering geographic factors that can slow down the exchange of information, e.g. rivers and seas that divides countries and regions. To include this, we introduce another random variable p_{cross} that determines the probability of information crossing over the given obstacle. With this probability, we exchange information only between the two sides along the obstacle in step 3.
  3. Finally, we also propose changing the global p_{new} and p_{repeat} to local competing groups by converting these variables to arrays. This better captures the reality because different groups of people may have different tendencies to interact with others. It is too simple to assume that every competing group has the same level of interaction and motivation to spread their own culture.

Back to Terabithian Tribes

Mathematica was used to program this Monte Carlo simulation. We study the general model and our modifications one by one.

Terabithia is an infinite kingdom, it is a torus. That is, if you leave the kingdom from one side, you will enter through the other side. There is no escape from lungi or Jesse’s rules. We simulate this by assigning a periodic boundary condition on our lattice when choosing neighbors for a particular site.

For one of our examples though, we will use a closed boundary condition.

We model the kingdom by a 50 \times 50 lattice , each site represents a group of people (presumably a family or a house). We choose the nearest four neighbors with whom each site will interact.





Figure 1. (a) Tribe colors. (b) Initial distribution of different groups.

Figure 1 shows an initial random distribution of different groups of people who follow different tribes, colored according to 1(a).

We would like to run the original paper model first. We choose 500 iterations for the simulation. Estimating that only one active interaction (an interaction with a broadcaster that changes someone’s mind to start following a new fashion) occurs in a day, this would mean the simulation is the result after 500 days.


Figure 2. Steady state reached after 500 iterations (days).

Figure 2 shows how fashions of different tribes have clustered over 500 days. Tribe 4 is less dominant for this particular number of iterations. The important point is that trends have emerged over different regions, it is not a random distribution of fashion anymore, as in 1(b).

Since we have imposed a periodic boundary condition, note how the clusters have continuity (wraps around) at the horizontal and vertical ends of the lattice.

We have helped Abul solve the initial problem. He can show this simulation to the king and inform him about possible clustering and number of people following particular fashions in this competing culture war after different number of days. However, there are more modifications on the way.

Rivers and Borders in Terabithia

Often we have borders among regions that stop people from interacting with each other. There are rivers and seas that distance people out (assuming no internet, like in the ancient days) and slow down the exchange of information and culture. Abul wants to incorporate these factors in the model. We help him by changing our neighborhood selection algorithm to include a set of cells in our lattice that stop information exchange.





Figure 3. (a) A different tribe is included among the cells (off-white cells creating a rectangle) which act as information barrier (a physical border, in a sense). (b) The two separate regions evolve independently, as expected.

Notice in figure 3 that some cultural trends have disappeared, they could not survive for 500 days. However, it is possible that they can come back if we ran the simulation for more iterations.





Figure 4. (a) A river that splits the kingdom into two equal regions. However, a slight probability of information exchange is allowed across the two river sides. Closed boundary conditions are used. (b) Result after 500 iterations.

Figure 4 shows our modification of the original algorithm to include slow information exchange among two regions. 4(b) shows what we would expect. The same cultures have emerged around the river sides since they have some interaction. Note the consistency of the clusters on both sides. However, they are dominated by the trends that are stronger in the larger regions. Closed boundary conditions were used for this example.

Individual Probabilities for Tribes

As promised, we now help Abul make the model more realistic by assigning individual p_{new} and p_{repeat} variables to each tribe. The algorithm needs to changed slightly for doing this.


Figure 5. Biased and higher probabilities assigned to tribe #5, which is why it cultural trend dominates over the others.

This is much better because it gives us the capability to include real world information in the model. Although the probability distributions for each of these random variables are decided here by us, in reality we can conduct surveys and build realistic discrete distributions from which we can run a much reliable simulation of the future events.


With the proposed modifications, we can expect that the model is useful in a real world setting to predict future outcomes for competing cultural trends in a society. The best way to integrate all the modifications is to create an MCMC (Markov Chain Monte Carlo) sampler to estimate parameters for the joint distribution function for p_{new} and p_{repeat} from real world data.

The resulting parameters will be used in the above simulation and we may get some useful results if we cleverly choose a good neighborhood coverage for each lattice site (e.g. considering information exchanged over internet among distant sites).

Finally, Abul can present these results to the king and expect to get a promotion in return. Math saves the day, once more.

100 poems in 1 minute (Bangla)

সে এসেছিল সে মোর  মর্ম গভীরতম উন্নত শির রয়েছে তুলিয়া  সকল,
তোমারি ভৈরবী মুকুল মম সুবাসে তব গোপনে সৌরভী আমার…
বন্ধু যদি চায় ভুলো না আপনায়  মিথ্যা দিয়ে চাতুরী দিয়ে রচিয়া।
সে কোন্‌ খেলা  কোথা কেটে গেল বৎসর বৎসর ক্ষয়িষ্ণু স্মৃতির ব্যর্থ!
সে দেয় বাঁটি ভরেছে মন গীত গন্ধে বসে

তোমারি এক প্রেমে  দুঃখসুখের বিচিত্র জীবনে  তুমি ছাড়া আর অন্য।।
বন্ধু যত মাথা তুলে বলতে পারে না হায়…
প্রাণের রথে বাহির হতে  পারব কবে  প্রবল প্রেমে সবার মাঝে,
সে আমার প্রাণে লাগে আমার বাণী আমার প্রাণে বাজায় বাঁশি॥

ও মা।।
যা চোখে পড়ে  তার পরে পথ ছাড়ো  তার পরদিনে উঠিবে প্রভাত  ফুটিবে,
বন্ধু কারে দিব দোষ বৃথা কর রোষ যারা শুধু মরে কিন্তু!
প্রাণের নিরর্থক চাঞ্চল্যে  ময়ূরটি ঘাড় বাঁকায় এদিকে ওদিকে  তার

কবিতা লেখার প্রধান উপাদানগুলো কি? আমি কবিতা লেখার কিছুই জানি না প্রায়। ছোটবেলায় ভাবতাম ছন্দ মিলিয়ে দিলেই বুঝি কবিতা হয়ে যায়। একটু বড় হয়ে বুঝলাম যে এটাকে প্রাথমিক ভাবে ছড়া বলে। তখন ভাবা শুরু করলাম যে কঠিন শব্দ ও বাক্যের বিন্যাস থাকলেই মনে হয় সেটা খুব ভাল কবিতা। আপাতদৃষ্টিতে উঠতি কবিদের লেখা পড়ে তাইই ধারণা হত। কবিতা পড়ার পরিধি একটু বিস্তার পাবার পর (রুদ্র মোহাম্মাদ শহিদুল্লাহ, পূর্ণেন্দু পত্রি, কিছু নিরমলেন্দু গুন ইত্যাদি), আর আধুনিক গানের কথাগুলো (জেমস – মারজুক রাসেল ইত্যাদি) ভাল লাগতে শুরু হবার পর কবিতার ক্ষমতার প্রতি শ্রদ্ধা তৈরি হওয়া শুরু করলো। নিজে কখনো কবি হতে পারবো না, সেটা ভাল করেই বুঝে গিয়েছিলাম তখনি। কিন্তু এই হতাশাই বোধহয় কবিতা নিয়ে অনেক ভাবে ভাবতে শিখিয়েছে। প্রধান প্রশ্ন ঘুরে ফিরে একটাইঃ কবিতা লেখার প্রধান উপাদানগুলো কি?

সাধারণ পাঠক হিসেবে আমার ধারণাগুলো সংক্ষেপে বলি। শব্দ আর বাক্যের চয়ন অন্যতম মূল মশলা। এর সাথে থাকতে হবে কোন নির্দিষ্ট ভাব (বা অনির্দিষ্ট, ইংরেজিতে একে বলে nonsense theme)। বাক্য বিন্যাস গৎবাঁধা গদ্যের মত না হলেই চলে অনেক সময়; ছন্দর উপস্থিতি অত্যাবশ্যক নয়, কবিতার ভাব এবং কবির রুচির ওপর নির্ভর করে এটা। এর বাইরে আরো অনেক কিছু আছে, তবে এক কথায় এই হচ্ছে আমার চিন্তা।

স্বয়ংক্রিয় কবিতা

কবিতা না লিখতে পারলেও, কবিতা লেখার প্রক্রিয়াকে কি আমরা স্বয়ংক্রিয় করে তুলতে পারি? নিয়মের আষ্টেপৃষ্ঠে বাঁধা যন্ত্র কি সাবলীল ভাবে কবিতা তৈরি করতে পারবে? শব্দ ও বাক্যের বিন্যাস ঠিক রাখা সম্ভব, এটা করা সহজ ব্যাপার আর আমরা আসলে এটা অনেক আগেই করে ফেলেছি। কিন্তু একজন কবির ভাব এবং দৃষ্টি পুরোটাই তার নিজস্ব সৃজনশীল অনুভূতির ফসল। একটা যন্ত্র, যে শুধু কিছু প্রাথমিক কমান্ড বুঝতে পারে, তার কাছে সৃজনশীল অনুভূতি আশা করা উচিৎ কি?

আরো সাধারণভাবে যদি বলি – শুধু কিছু প্রাথমিক নিয়ম কে আমাদের বিল্ডিং ব্লক হিসেবে নিলে তাদের যেকোনো সমষ্টি থেকে আমরা কতোটুকু complex behavior আশা করতে পারি? মানুষের মস্তিষ্কের কার্যবিধি কিছুটা এরকম। আমাদের নিউরনরা বেশ কিছু সিগন্যাল আদান প্রদান করে নিজেদের মধ্যে। এসব সিগন্যালকে আমরা মোটামোটিভাবে শনাক্ত করে ফেলেছি। এছাড়াও দেখা গেছে যে কয়েকটি নিউরনের সমষ্টি (নিউরাল নেটওয়ার্ক) অনেক ধরণের কমপ্লেক্স প্যাটার্ন তৈরি করতে পারে। শুধু একটি নিউরনের পক্ষে এতোটুকু জটিল প্যাটার্ন তৈরি করা সম্ভব না, কিন্তু কয়েকজন একত্র হলেই কেওস (“বিশৃঙ্খলা”) তৈরি হয়ে যায়, যার থেকে তৈরি হয় অনুভূতি। আগ্রহীরা এই বইটি পরতে পারেনঃ New Kind of Science (Stephen Wolfram) যেখানে এই পদার্থবিদ ও গণিতবিদ সাধারণ মানুষের জন্য লিখেছেন ও দেখিয়েছেন কি করে শুধু ছোটখাটো কিছু প্রোগ্রাম একজন আরেকজনের সাথে interact করলে কতরকম কমপ্লেক্স কিন্তু বোধ্য প্যাটার্ন পাওয়া সম্ভব।

তাহলে অনুভূতি বলতে কি বুঝি আমরা? এটাকে গনিতের আওতায় আনা সম্ভব কি? অনেকেই চেষ্টা চালিয়ে যাচ্ছেন (রজার পেনরোজ etc.), যাদের প্রধান যুক্তি গড়ে উঠেছে chaos theory কে কেন্দ্র করে। যেরকম কমপ্লেক্স আচরণের কথা বললাম, সেটাকেও গণিত দিয়ে বাঁধ মানানো সম্ভব হয়ত। তারই একটি প্রচেষ্টা হিসেবে ৭০ এর দশকে প্রথম স্বয়ংক্রিয় কবিতা তৈরি করার জন্য একটি অ্যালগরিদম দেয়া হয়। মারকভ মডেল ব্যাবহার করে এই প্রক্রিয়াটি কিছু প্রদত্ত টেক্সট থেকে pseudorandom টেক্সট তৈরি করতে পারে, যা পড়লে অনেক সময় বোঝা মুশকিল এটা আসল না নকল। উপরের কবিতাটা কিন্তু এই মারকভ মডেল দিয়েই তৈরি করা। 🙂

মারকভ মডেল

আমি প্রধানত ব্যবহার করেছি খুব সাধারণ একটা মডেল, যার নাম হচ্ছে n-gram Markov Model। এখানে n যেকোনো নাম্বার হতে পারে ১ থেকে শুরু করে।

যেকোনো মারকভ মডেল সাধারণত একটি বিবর্তনশীল প্রক্রিয়া। আমি যদি কিছু নাম্বার দিয়ে একটা ভেক্টর (state) তৈরি করি, আর সেই ভেক্টর কে একটি ম্যাট্রিক্স দিয়ে গুণ করতে থাকি (ম্যাট্রিক্সটির কিছু properties maintain করতে হবে, যেমন Ergodicity and Aperiodicity) তাহলে একটা সময় সেই ভেক্টরটির মাণ আর পরিবর্তন হয় না। আমরা কেওস থিওরি তে বা স্ট্যাটিস্টিকস এ একে বলি stable state। ম্যাট্রিক্সটিকে বলা হয় transition matrix। এই ম্যাট্রিক্সটি এবং এই পুরো বিবর্তন ব্যাবস্থাটি  এমন ভাবে তৈরি করা হয় যেন বর্তমান ভেক্টর এর মাণ শুধু এর আগের কিছু states (আগের ইটেরেশন এর ভেক্টর এর মাণ) থেকে একদিকে converge করতে শুরু করে। কিন্তু  বর্তমান ভেক্টরটি কিন্তু আবার আগের এবং পরের ভেক্টর থেকে স্বাধীন (একে বলা হয় Markov property)।

n-gram Markov Model সাধারণত n সংখ্যক শব্দ নেয় (প্রদত্ত টেক্সট থেকে), ধরি এটা হচ্ছে একটা ভেক্টর v[1..n], এবং বাকি টেক্সটের মাঝে v[2..n] খোঁজ করে। যতগুলো match পাওয়া যায়, ততগুলো থেকে আমরা র‍্যান্ডমলি একটা বেছে নেই। সেটার পরের শব্দটি নিয়ে আমরা আমাদের পরের state তৈরি করি, যাকে বলতে পারি v’। অর্থাৎ, v’ = Union[{v[2..n], chosen word}].

যেমনঃ “আমি ফুচকা খাবার জন্য ফুচকা খাবার দোকানে গেলাম, কিন্তু ফুচকা খাবার দোকান বন্ধ ছিল।” এই বাক্য থেকে আমি বেশ কিছু 3-gram (n = 3) তৈরি করতে পারি।

আমি ফুচকা খাবার, ফুচকা খাবার জন্য, খাবার জন্য ফুচকা, জন্য ফুচকা খাবার, ফুচকা খাবার দোকানে, খাবার দোকানে গেলাম, …, ফুচকা খাবার দোকান, দোকান বন্ধ ছিল।

এখানে আমি যদি v[1..n] = {আমি, ফুচকা, খাবার} ধরি, তাহলে v[2..n] = {ফুচকা, খাবার}. তাহলে এই পুরো বাক্যে v[2..n] তিনবার পাওয়া যাবেঃ ফুচকা খাবার জন্য, ফুচকা খাবার দোকানে এবং ফুচকা খাবার দোকান। আমার কাছে তাহলে তিনটি অপশন আছে পরের শব্দটি বাছাই করার জন্যঃ  জন্য, দোকানে এবং দোকান।ধরা যাক পরের শব্দটি র‍্যান্ডম ভাবে সিলেক্ট করলাম এবং পেলাম দোকান। তাহলে v'[1..n] = {ফুচকা, খাবার, দোকান}।

নতুন v’ দিয়ে আমি একি অ্যালগরিদম আবারো চালাতে পারি। এইভাবেই বেশ কিছু iteration এর পর আমরা নতুন আরেকটি বাক্য পাই। এখানে n যত বড় হবে, ততই accurate বাক্য পাওয়া যাবে। কিন্তু সেটা আমাদেরকে শুধু মূল প্রদত্ত টেক্সট এর কাছাকাছি একটা কিছু দেবে। n ছোট হলে আরো অনেক নতুনত্ব আসবে, কিন্তু accuracy কমে যাবে। সেটা যদিও আরো অনেক interesting হবে।

এটা মারকভ মডেল কারণ আমার বর্তমান ভেক্টর আগের ও পরের ভেক্টরের ওপর নির্ভরশীল নয়। এখানে আমরা যা করছি তা মূলত একটি বড় ম্যাট্রিক্স দিয়ে একটি ভেক্টর কে বারবার গুণ করারই সমান।

এখানে এটাও লক্ষণীয় যে এই মারকভ মডেল আসলে কেওস থিওরির সাথে সম্পৃক্ত। যেকোনো গল্প, উপন্যাস বা কবিতা কে যদি আমরা কিছু সমষ্টিগত শব্দের বিশৃঙ্খলা হিসেবে ধরে নেই, তাহলে এই বিশৃঙ্খলা থেকে একি প্যাটার্নের আরেকটি বিশৃঙ্খলা তৈরি করাই হচ্ছে n-gram মারকভ মডেল এর কাজ। কবিতার মত ভাব নির্ভর সাহিত্যে এ ধরণের মডেল বেশ কাজে আসে।

এক মিনিটে ১০০ কবিতা?

চাইলেই কি এ দিয়ে অনেক কবিতা লিখে ফেলা যাবে? আমি রবীন্দ্রনাথের ৫০০ কবিতা, সুকান্তর কাব্যগ্রন্থ ছাড়পত্র আর জীবনানন্দর বেশ কিছু কাব্যগ্রন্থ একত্র করে একটা corpus তৈরি করেছিলাম বেশ আগেই, কবিতার মধ্যে শব্দর বিশৃঙ্খলার প্যাটার্ন বের করার উদ্দেশ্য নিয়ে। সেটা ব্যবহার করে, আর বেশ কিছু theme keyword দিয়ে (যারা কবিতার প্রধান ভাব নির্ধারণ করবে) মিনিটেই অনেক কবিতা বের করে ফেলা সম্ভব। Mathematica তে লেখা আমার বেশ ছোট একটা প্রোগ্রাম খুব দ্রুতই এই কাজ সেরে ফেলতে পারে নিপুণ ভাবে। প্রথমে লেখা কবিতাটি মূলত রবীন্দ্রনাথের ৫০০ কবিতার ওপর নির্ভরশীল। আমি আরো বেশ কিছু customization করেছি, যেমন র‍্যান্ডম চয়েস করার সময় চাইলেই biased সম্ভাব্যতা নিয়ে আসা যায়, তাহলে যেকোনো কবি বা কবিতার প্রাধান্য থাকতে পারে এই নতুন কবিতার ওপর।

সবসময় যে খুব ভাল কাজ করবে না, তার প্রমাণ পরের কবিতাটি। এটা বেশ কম সংখ্যক কবিতা থেকে তৈরি করা হয়েছে, এবং কিছু ভাবের (thematic) শব্দ কে লক্ষ্য করে প্রোগ্রামটি চালানো হয়েছে, যেমন প্রাণ, বন্ধু, সুখ, তোমারি এবং বিদায়।

প্রাণের বীণা নিয়ে যাব সেই অতলের সভা মাঝে চিরদিনের সুরটি বেঁধে শেষ

তোমারি চরণ ওগো মৌন না যদি জুটে নিজের বল

সে ত্রিশূলমূলে শিবের দেউলদ্বারে কাঁদছে স্মৃতি কে দেবে,
সুখে তৃপ্ত তুমি আমার গীতরাগে ভালো লাগে জানি আমি তোমার

তোমারি ইচ্ছা করো হে পূর্ণ আমার জীবন মাঝে যাচি হে তোমার,
বন্ধু চুপে চুপে চলিতেছে বনপথ ধরি আকাশের বুকে বুকে

প্রাণের বীণা নিয়ে যাব সেই অতলের সভা মাঝে চিরদিনের সুরটি বেঁধে শেষ।।
বন্ধু আজকে আঘাত দিও না তোমাদের পকেটে পকেটে আমরা!
সে যে সুদুর অজানা করবীকুঁড়ির পানে চোখ তার ভরে গেছে নীল!
সে ছুটিয়া যায় চকিত আকাশ পায় না নাগাল যার লুঘ।
যা ছিল গোপন স্বপন কদিন রয় এসেছে গোধূলি।।
প্রাণের বীণা নিয়ে যাব সেই অতলের সভা মাঝে চিরদিনের সুরটি বেঁধে শেষ!
বিদায় তুমি তাহা জানিলে না চলে গেছে মুসাফের কবে ফের।
বিদায় দেখেছ উঠল যে হাওয়া ঝোড়ো ঠিকানা রইল।
সে সকাল আসবেই যেদিন এই খবর পাবে প্রত্যেকের চোখেমুখে সকালের আলোয়!
প্রাণের বীণা নিয়ে যাব সেই অতলের সভা মাঝে চিরদিনের সুরটি বেঁধে শেষ

এই কবিতা তে একটা কথা বারবার এসেছেঃ প্রাণের বীণা নিয়ে যাব সেই অতলের সভা মাঝে চিরদিনের সুরটি বেঁধে শেষ।। এর কারণ হচ্ছে corpus ছোট হওয়ায় খুব সম্ভব প্রাণ সংক্রান্ত কথা আমার বেচারা প্রোগ্রামটি আর খুঁজে পায় নি। আরেকটি অর্থহীন কথা আছেঃ বন্ধু আজকে আঘাত দিও না তোমাদের পকেটে পকেটে আমরা! এই কথার সাধারণ কোন মানে নেই, কিন্তু একেবারেই সম্পূর্ণ অর্থহীন বলা যাবে না ঠিক। কবিতা যেহেতু ভাব সাহিত্য, এখানে মারকভ মডেল সহজেই পার পেয়ে যেতে পারে!


কখনো বুঝিনি যেটা, এটা ছিল সূচনা,

আছে বাকি স্বপ্নের উপসংহার…

– তপু।

মারকভ মডেল বেশ পুরনো জিনিস। অনেক ভাষাবিদ, গণিতবিদ ও কম্পিউটার বিজ্ঞানীরা এর ওপর কাজ করেছেন। n-gram মারকভ মডেল ব্যাবহার করে Automatic Content Generation এবং নকল করা লেখা ধরার উপায় নতুন কিছু না। যা করেছি তা হচ্ছে শুধুই সূচনা, গাণিতিক ভাবে এই মডেল এখন বহুল প্রচলিত গবেষণার বিষয়। প্রাণিবিদ্যায় cell culture dynamics এবং genetic code sequencing এও এই মডেল ব্যাবহার করা হয়।

কবিতা লেখায় এর গ্রহণযোগ্যতা প্রশ্নসাপেক্ষ। গাণিতিক ভাবে এই মডেল কে সাপোর্ট দেয়া যায়, এবং আশা করা যায় ডায়নামিক মারকভ মডেল দিয়ে ভবিষ্যতে কোন প্রদত্ত টেক্সট এর সাহায্য ছাড়াই কবিতা লেখা যাবে। মানুষ এটা মেনে নেবে নাকি জানি না। তবে সবার আগে জানতে হবে কবিতা বলতে আমরা কি বুঝি, বা আমার মূল প্রশ্নঃ কবিতার মূল উপাদানগুলো কি কি? অনেক সময় একটা theme সংক্রান্ত কিছু ব্যাকরণ মেনে চলা শব্দের চয়নকেও কবিতা বলা যেতে পারে।

আমি যদি আসলেই কাউকে বলতাম যে কবিতাটা আমার লেখা, তাহলে মানুষ কিন্তু প্রায় বিশ্বাস করে ফেলত (অনেকটা টুরিং এর এ.আই. টেস্টের মত ব্যাপার). কিছু বন্ধুকে জিজ্ঞেস করে দেখেছি, যারা মোটামোটি কবিতা পড়ে। প্রায় সবাইই ধরে নিয়েছে যে এটা (প্রথম কবিতাটা) আমি লিখেছি। কিছু চ্যাট লগ দেখলে বোঝা যেতে পারেঃ

: tui likhchos?
me: ho beta
: khaisere mama
pura nazrul type
me: hehehe
: seriously
: tui likhsos?
me: ho
kemon hoise?
: aissala
  bhaloi to mone hoy
  kar jonne likhsos?
me: hehehe
ki mone hoy?
me: just tell me what you think
: tumi tomar mar theke fragrance pao
she's the flower
you're the shourov
me: hmm
 khub e high thought er bepar mone hocche!

কিন্তু আমার ধারণা শুরুতেই যদি বলতাম যে এটা প্রোগ্রাম থেকে লিখেছি, সবাই সাথে সাথে ভুল ধরা শুরু করতো। আমরা সাধারণত কোন এক্সপার্ট কেউ কথা বললে সেটা মেনে নেই, তর্ক কম করি। অনেক বড় বড় বোদ্ধারা যখন কিছু বলে সেটাকে প্রশ্ন কম করি, কিন্তু একই কথা সাধারণ বা নগণ্য কেউ বললে মেনে নিতে পারি না।

আমার দিক থেকে এই প্রোগ্রামের আপাতত দুইটা ব্যাবহার দেখতে পাচ্ছি। একটা হচ্ছে আধুনিক যুগের বাংলা মেটাল ব্যান্ডদের জন্য। তাদের গানের কথা সাধারণত বোঝা যায় কম, এবং যত কম বোঝা যায় এবং যত কঠিন শব্দ ব্যাবহার করা যায় ততই ভাব। কাজেই বেচারাদের কষ্ট করে ডিকশনারি ঘেঁটে আর গানের কথা লেখার দরকার কি, এমনিতেই তো বাংলা প্রায় পারেই না। আমাকে বললে আমি ফ্রি তে তাদের গান পাঠায় দিব। বানাতে কয়েক সেকন্ড সময় লাগবে শুধু। আরেকটা ব্যাবহার হচ্ছে আধুনিক তরুণীদের মুগ্ধ করতে। আমাকে অনেকেই বলে মেয়েরা নাকি গম্ভীর কবিতা শুনলে পটে যায়। এই প্রোগ্রাম দিয়ে আর যাইই হোক, মেয়ে পটানতে সুবিধা হইতে পারে। 🙂

বিশেষ দ্রষ্টব্যঃ কোড

ইনপুট প্রোসেসিং এবং ডাটা স্ট্রাকচার সংক্রান্ত ঝামেলা বাদ দিলে মূল মারকভ মডেল কোড খুব ছোট এবং সাধারণ।

generateSentence[n_, size_, prtmain_, initword_] := Module[
 {prevch = {}, res = {}, choices = {}, posch = 0, i},
 posch = RandomChoice[Position[prtmain[[;; , 1]], initword]];
 For[i = 1, i <= size, i++,
 res = AppendTo[res, prtmain[[posch[[1]], 1]]];
 (* search for temp in the rest and pick a random one *)
 posch =
 Position[prtmain[[;; , 1 ;; n]],
 prtmain[[posch[[1]], 2 ;; n + 1]]]];
 choices =
 Length[Position[prtmain[[;; , 1 ;; n]],
 prtmain[[posch[[1]], 2 ;; n + 1]]]]]
 Return[{res, choices}]

poem = {};
For[i = 1, i <= Length[result], i++,
 poem = AppendTo[poem, StringJoin[
 Insert[result[[i, 1]], " ",
 Table[{j}, {j, 2, Length[result[[i, 1]]]}]],
 RandomChoice[{"...", "।", "।।", "!", "\n", ","}],

Analyzing Tagore’s Literature (Part 2)

In part 1, I employed Bose-Einstein distribution to find out how the “temperature” of Tagore’s writing varies across different novels. In part 2, I delve into Zipf’s power law and similarity metrics used to compare high dimensional vectors in order to analyze the lexical wealth and similarity across different novels and short stories written by the legend.

Zipf’s Law

In fractal theory, Zipf’s power law on linguistics is a tried and accepted heuristic to compare large texts [1]. This power law statistics, derived from the behavior of certain kind of fractals, can be used in many other disciplines too. In simple terms, Zipf’s law is stated as: N = Ak^(-\phi).

Taking logs on both sides: log(N) = log(A) – \phi * log(k)

we get a linear equation. Here, N is the total number of words in a corpus, k is the ratio of the number of distinct words n to N. A is a constant amplitude and phi is a phase value that is unique for a given author. Using simple regression analysis, it is possible to find a characteristic phi for any author. The law merely dictates a simple fact: as the text size increases, the number of distinct words decreases. At what rate this happens is a question that is related to the expertise of a writer in maintaining variability of words and sentence structures over the course of his novels.


The following table shows n, N and k values for the same set of novels in part 1.


The following table shows the same data for a collection of short stories.


 Note the higher values of k for the short stories. This could be mainly due to the smaller size of the text.


Figure 1. (Left) Data points in the Log(k)-Log(N) plane, and a linear fit equation showing the characteristic gradient \phi. (Right) Same experiment done on the short stories.

Figure 2. The linear fit equations for novels and stories on the same plot (red – stories, blue – novels). Clearly it demonstrates that the rate at which Tagore’s lexical wealth k falls is higher for novels. This could be due to the difference in the text size though.

Heap’s Law

Heap’s law is similar to Zipf’s law. It’s a power law that describes how the number of unique elements in a set of randomly chosen elements grow as the size of the set increases. In our case, we would expect to see that the number of unique words increase as we increase the size of the text.


Figure 3. (Left) Heap’s law demonstrated for novels (log(n) vs. log(N) plot), (right) for short stories.

Figure 4. The two linear fit equations on the same plot (red – short stories, blue – novels). This demonstrates that although the number of distinct words used in short stories prevail for a short size of text, ultimately the novels take over as the size of the text increases. This may indicate a better effort on Tagore’s side to polish and revise his novels to amplify the lexical wealth, whereas, statistically, this may be less true for his short stories.

 Similarity Measure

The variability of distinct words across a set of novels or short stories can be captured by feature vectors – essentially rows of numbers in a document-term matrix. Comparing these high dimensional vectors to infer the similarity between short stories and novels of Tagore might be useful. Here, I use two schemes to compare these high dimensional vectors. One is the cosine of the angle between two vectors, and the other is the L2-norm of the difference between two vectors. These schemes project the high dimensional vectors to scalar values that can be easily compared. Histograms from all possible pair combinations are produced to analyze how similar or different are the span of the words used in short stories or novels.


Figure 5. (Left) Histograms from L2-normed difference scheme, (right) from cosine scheme. Red – short stories, blue – novels. Note the bimodal distribution for both novels and stories, except the cosine heuristic for short stories. It seems there are two principal modes of similarity among all novels and stories. Although this could be just a statistical property of texts that I am not aware of.

Note the width of novels histograms in both cases; they are wider than those of stories’. For the cosine scheme the novels histogram has a mode that’s closer to 1.0, whereas the average peak for stories histogram is farther from 1.0. These two observations mean that similar words and sentence structure recur themselves throughout novels, more than short stories. This is consistent with the inferences drawn in part 1 and Zipf’s and Heap’s laws for Tagore’s work.

Comparing Upendrakishor Raychowdhury’s Work

One last thing I try here is to see how these measures can be used to compare different authors’ works. Although my aim was to compare Kazi Najrul Islam with Tagore, unfortunately I could not find any of his work in text form. Instead, I found Upendrakishor Raychowdhury’s short stories collection and decided to compare the lexical wealth between the two authors’ stories collection. It should be noted that lexical wealth is only one of the (measurable) heuristics to compare authors. Most of the comparisons in the field of literature are qualitative and depend on the taste of readers and critics. Nonetheless, the lexical wealth does say a lot about the author’s expertise in not being monotonous.

The following table shows UR’s short stories that I have collected, along with their k values.


Figure 6. (Left) Zipf’s law linear fit for UR’s short stories. (Right) Zipf’s law linear fits for both UR’s (red) and Tagore’s (blue) short stories. Although it seems that UR has an upper hand with Tagore (smaller falloff rate as we increase the lexical wealth k), it would be dubious to claim that UR is better at not being monotonous. It’s quite risky to draw conclusions based on such a small margin, lack of adequate data is another issue. I could say something clearly if I had a collection of hundreds of stories from both writers. 🙂


In part 1 I found out that a possible characteristic falloff of the lexical wealth may exist for Tagore’s writings. The experiments here in part 2 restate a celebrated fact in linguistics: every author has a natural limit after which his writings give way to being monotonous in terms of repeating words and sentence structures. Rabindranath Tagore was not so different from the group of his contemporary writers. It will be interesting to see how his works compare with other contemporary works when/if I get enough data. 🙂

[1] L. L. Goncalves, L. B. Goncalves, Fractal power law in literary English, Physica A 360 (2006) 557 – 575.