No preview image

1 collaborator

Default-person Karen Chu (Author)



Tagged by Karen Chu almost 8 years ago


Tagged by Karen Chu almost 8 years ago

Model group EECS 372-Spring 2011 | Visible to everyone | Changeable by the author
Model was written in NetLogo 4.1.3 • Viewed 198 times • Downloaded 7 times • Run 7 times
Download the 'Chu_Karen_PhonAcquisition' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


This model is a computational implementation of the Speech Learning Model of bilingual acquisition of phonetic categories (Flege, 1995). Category prototypes and language exemplars are modeled as agents within the 2D phonetic space. Language exposure is modeled as addition of new exemplars to the space, and category acquisition is modeled as shifting of L1 categories due to equivalence classification, or creation of new L2 category prototypes. Three user-controlled behavioral are included in the implementation.


The initialization of the phonetic space is as follows:

1) Create n initial bilingual L1 category prototypes with random locations (n is user-specified).

2) Each bilingual L1 prototype hatches a monolingual L1 prototype.

3) Each bilingual L1 prototype populates itself with m attached exemplars distributed normally around its location (m is user-specified).

4) Newly hatched exemplars link themselves and their category prototype.

5) Exemplars also link themselves with their prototype's corresponding monolingual L1 prototype.

At each timestep, the phonetic space changes according to the specified agent behavior rules:

1) Create a new randomly located L1 exemplar:

- The new L1 exemplar identifies the nearest bilingual L1 prototype (i.e., distance ? cluster-max of that prototype). The exemplar joins that prototype's category by setting the prototype as its leader and creating a link between itself and the prototype.

- The exemplar identifies the nearest monolingual L1 prototype and creates a link between itself and the prototype.

- The L1 exemplar asks both of its newly linked L1 prototypes to increment their cluster-size by one.

2) Create a new randomly located L2 exemplar:

- The new L2 exemplar checks to see if it is located within the maximum radius of the nearest existing bilingual L1 or L2 prototype. If so, then it joins that prototype's category, sets that prototype as its leader, and links itself to the prototype.

- If the exemplar is not located within the bounds of an existing category cluster, it will proceed to hatch a new L2 prototype at the current location, set that prototype as its leader, and link itself to the new L2 prototype. This essentially forms a new phonetic category distinct from existing L1 and L2 categories.

- The L2 exemplar then asks its now-leader to increment cluster-size by one.

3) Each prototype agent updates its location, cluster-max parametr, and deviation parameter (if applicable) given the newly added L1 and L2 exemplars:

- The centroid of each cluster is recalculated (using locations of exemplars linked with the prototype), and the prototype agent changes its location to match the centroid if necessary.

- Each prototype agent updates its cluster-max value to be the larger of either the distance from the farthest linked exemplar or the user-specified minimum value.

- Bilingual L1 prototypes recalculate their distance from their corresponding monolingual L1 prototype and update the value of the deviation parameter if necessary.

4) The plot of average deviation values is updated.


The behavior of the model can be manipulated using three user-defined parameters:

init-cluster: The number of L1 exemplars with which each L1 prototype is populated during initialization. This represents a speaker's level of experience with their L1. Having more initial exemplars corresponds to more language experience (having had more exposure to L1 input), while having fewer exemplars corresponds to less language experience. Because ease and success of L2 acquisition has been shown to be related to how well-established the L1 categories are, this parameter allows us to model varying degrees of L1 establishment.

initial-categories: The number of L1 prototypes. Languages around the world vary in terms of how many phonetic categories exist. For example, while English has 14 vowels in its inventory, Spanish has only 5. This parameter allows us to model this specific feature of languages and observe how it influences on L2 category formation patterns.

min-cluster-max: The minimum value a prototype's cluster-max parameter is allowed to have. This reflects how small or large an area of influence any category must minimally have, and correlates with the speaker's likelihood of categorizing a sound as either foreign or non-speech. This measure is partially language-determined and also individual-determined. Variations in this likelihood could manifest in how easily or well any given person acquires their L2. This parameter models the influence of this likelihood on L2 category learning.

Define these three parameters using the provided sliders.

The setup button initializes a phonetic space with the specified number of L1 categories and initial cluster size.

The go button starts the acquisition process. Press the go button a second time to stop the process.

To observe the acquisition process step-by-step, use the step button.

Monitors for number of L2 categories formed and average bilingual-monolingual deviation are provided.

A plot of the average bilingual-monolingual deviation over the course of a run is also provided.


Try manipulating each of the behavioral parameters individually. What effect does each one have on the evolution of the phonetic space?

Are there certain combinations of parameters that result in no L2 categories?

What settings might maximize or minimize bilingual-monolingual deviation?


Try moving around the sliders for the behavioral parameters!

What happens when you take them to extremes? What happens if more than one is at an extreme?


In the current implementation, a new L2 category is formed by a single exemplar that lies outside existing categories. Is this realistic? How could you modify the model to make this more true to real life? Perhaps there needs to be a critical mass of exemplars before a new category can form?

What other linguistic behavioral parameters can you think of? What might they do, and what aspects of language could they model?

What about multilinguals (more than 2 languages)?


This model makes liberal use of breeds and link-breeds to represent the exemplars and prototypes for the two languages.


Language Change


Flege, J. E. (1995). __Second-language speech learning: Theory, findings, and problems,__ in Speech Perception and Linguistic Experience: Issues in Cross-language Research, edited by W. Strange (York, Timonium, MD), pp. 233_272.

Model written by Karen L. Chu, Northwestern University EECS 372/472, Spring 2011.

Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

breed [L1s L1] ;bilingual L1 prototypes
breed [L2s L2] ;L2 prototypes
breed [exemplar1s exemplar1] ;L1 exemplars
breed [exemplar2s exemplar2] ;L2 exemplars
breed [pureL1s pureL1] ;monolingual L1 prototypes

undirected-link-breed [leads lead] ;links between exemplars and prototypes
undirected-link-breed [corrs corr] ;links between corresponding bilingual and monolingual L1 prototypes

L1s-own [
  cluster-max ;distance to farthest exemplar
  cluster-size ;number of exemplars in cluster
  deviation ;distance to corresponding monolingual prototype

L2s-own [

pureL1s-own [

exemplar1s-own [
  leader ;prototype of category

exemplar2s-own [

to setup
  set-default-shape turtles "circle"
  create-L1s initial-categories [
    set size 2
    set color blue
    setxy random-xcor random-ycor
    set cluster-max min-cluster-max
    set cluster-size 1
  ask L1s [create-pure]
  ask L1s [init-distro]

to go

; create monolingual L1 prototypes

to create-pure ;;L1 method
  hatch-pureL1s 1 [
    set size 2
    set color violet
    set cluster-max min-cluster-max
    set cluster-size 1
    create-corr-with myself [set color orange]

; create initial exemplar population of L1 categories

to init-distro ;;L1 method
  hatch-exemplar1s init-cluster [
    set size 1
    let newx (random-normal [xcor] of myself 5)
    let newy (random-normal [ycor] of myself 5)
    if newx < min-pxcor [set newx min-pxcor + 1]
    if newx >= max-pxcor [set newx max-pxcor - 1]
    if newy < min-pycor [set newy min-pycor + 1]
    if newy >= max-pycor [set newy max-pycor - 1]
    setxy newx newy
    set color pink
    set leader myself
    create-lead-with min-one-of pureL1s [distance myself] [set color yellow] ;linking to monolingual L1 prototypes
  set cluster-size init-cluster

; update cluster-max value

to update-L
  ask turtles with [breed = L1s or breed = L2s] [
    let maxn max-one-of lead-neighbors [distance myself]
    ifelse maxn != nobody and (distance maxn) >= min-cluster-max [
      set cluster-max distance maxn
      set cluster-max min-cluster-max

; add a new L1 exemplar

to add-exemplar1
  create-exemplar1s 1 [
    set color pink
    setxy random-xcor random-ycor
    set leader min-one-of L1s [distance myself]
    ask leader [set cluster-size cluster-size + 1]
    ask min-one-of pureL1s [distance myself] [ ; linking to monolingual L1 prototypes
      create-lead-with myself [set color yellow]
      set cluster-size cluster-size + 1

; add a new L2 exemplar

to add-exemplar2
  create-exemplar2s 1 [
    set color red
    setxy random-xcor random-ycor
    let candidate min-one-of turtles with [breed = L1s or breed = L2s] [distance myself]
    ifelse distance candidate < 0.95 * [cluster-max] of candidate [
      set leader candidate
    [ ; if outside existing category, form a new L2 category
      hatch-L2s 1 [
        set size 2
        set color green
        set cluster-size 1
        set cluster-max min-cluster-max
        ask myself [set leader myself]
    ask leader [set cluster-size cluster-size + 1]

; update prototype locations based on exemplars in category

to move-L
  ask turtles with [breed = L1s or breed = L2s or breed = pureL1s] [
    if cluster-size > 2 [
      let xsum 0
      let ysum 0
      set xsum mean [xcor] of lead-neighbors
      set ysum mean [ycor] of lead-neighbors
      if xsum < min-pxcor [set xsum min-pxcor]
      if xsum >= max-pxcor [set xsum max-pxcor]
      if ysum < min-pycor [set ysum min-pycor]
      if ysum >= max-pycor [set ysum max-pycor]
      setxy xsum ysum
  ; update monolingual-bilingual deviation
  ask turtles with [breed = L1s] [
    let minpure min-one-of corr-neighbors [distance myself]
    set deviation distance minpure

; update exemplar-prototype links

to update-links
  ask exemplar1s [create-lead-with leader]
  ask exemplar2s [create-lead-with leader]

to do-plots
  set-current-plot "Deviations"
  set-current-plot-pen "dev"
  plot mean([deviation] of L1s)

to-report absolute-value [number]
  ifelse number >= 0
    [ report number ]
    [ report (- number) ]

There are 4 versions of this model.

Uploaded by When Description Download
Karen Chu almost 8 years ago Final version Download this version
Karen Chu almost 8 years ago No description provided Download this version
Karen Chu almost 8 years ago No description provided Download this version
Karen Chu almost 8 years ago Initial upload Download this version

Attached files

No files

This model does not have any ancestors.

This model does not have any descendants.